Hum*_*eld 7 xcode date formatter ios swiftui
我从 Github 获取此内容:\n https://github.com/emilioschepis/techfeed \n当我启动应用程序时,我在控制台中遇到问题:\n无法转换“2011 年 8 月 3 日星期三 09:44:00 + 0200”至今。\n并且我有一个黑屏。
\n我 \xc2\xb4m 使用最新的 xCode 版本并更新代码。\n感谢您的回答....\n
解析器:
\nimport Foundation\n\nclass ReleasesParser: NSObject {\ntypealias CompletionResult = ([Release]) -> Void\n\nprivate static var formatter: DateFormatter = {\n let formatter = DateFormatter()\n formatter.dateFormat = "E, dd MMM yyyy HH:mm:ss z"\n return formatter\n}()\n\nprivate var releases = [Release]()\nprivate var currentElement = ""\nprivate var currentGuid = ""\nprivate var currentTitle = ""\nprivate var currentDescription = ""\nprivate var currentPubDate = ""\nprivate var completion: CompletionResult?\n\nfunc parse(data: Data, completion: @escaping CompletionResult) {\n self.completion = completion\n \n if data.isEmpty {\n completion([])\n return\n }\n \n let parser = XMLParser(data: data)\n parser.delegate = self\n parser.parse()\n}\n}\n\nextension ReleasesParser: XMLParserDelegate {\nfunc parserDidStartDocument(_ parser: XMLParser) {\n releases.removeAll(keepingCapacity: true)\n}\n\nfunc parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {\n currentElement = elementName\n \n // If we are about to start a new item clear the fields\n if currentElement == "item" {\n currentGuid = ""\n currentTitle = ""\n currentDescription = ""\n currentPubDate = ""\n }\n}\n\nfunc parser(_ parser: XMLParser, foundCharacters string: String) {\n switch currentElement {\n case "guid":\n currentGuid += string.trimmingCharacters(in: .whitespacesAndNewlines)\n case "title":\n currentTitle += string.trimmingCharacters(in: .whitespacesAndNewlines)\n case "description":\n currentDescription += string.trimmingCharacters(in: .whitespacesAndNewlines)\n case "pubDate":\n currentPubDate += string.trimmingCharacters(in: .whitespacesAndNewlines)\n default:\n break\n }\n}\n\nfunc parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {\n // If we are about to end an item add it to the list\n if elementName == "item" {\n guard let date = Self.formatter.date(from: currentPubDate) else {\n print("Could not convert \\"\\(currentPubDate)\\" to Date.")\n return\n }\n \n let release = Release(id: currentGuid,\n title: currentTitle,\n description: currentDescription,\n date: date)\n \n releases.append(release)\n }\n}\n\nfunc parserDidEndDocument(_ parser: XMLParser) {\n completion?(releases)\n}}\nRun Code Online (Sandbox Code Playgroud)\n列表视图行:
\nimport SwiftUI\n\n\nstruct ReleaseRow : View {\nvar release: Release\n\nprivate var formatter: DateFormatter = {\n let formatter = DateFormatter()\n formatter.dateFormat = "E, dd MMM yyyy"\n return formatter\n}()\n\ninit(_ release: Release) {\n self.release = release\n}\n\nvar body: some View {\n VStack(alignment: .leading) {\n Text(release.title)\n .font(.headline)\n Text("\\(release.date, formatter: formatter)")\n .font(.subheadline)\n .foregroundColor(.gray)\n }\n .frame(height: 44.0)\n}}\nRun Code Online (Sandbox Code Playgroud)\n
小智 17
有一种更简单的方法来显示日期/时间
format参数)formatter参数)请参阅下面的示例:
struct TestFormat: View {
let releaseDate = Date()
static let stackDateFormat: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "E, dd MMM yyyy HH:mm:ss z"
return formatter
}()
var body: some View {
VStack {
//iOS 15
Text(releaseDate, format: Date.FormatStyle().year().month().day().weekday().hour().minute().second().timeZone())
//iOS 14 and latter.
Text("\(releaseDate, formatter: Self.stackDateFormat)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
当向测试提供格式化程序时,当区域设置发生更改时,屏幕上的标签会自动更新。如果像在 UIKit 中那样手动将日期转换为字符串,则不会发生这种情况。
ListViewRow 中的 dateFormat 是E, dd MMM yyyy,而 date 是 format E, dd MMM yyyy HH:mm:ss z。您必须使用此日期格式转换日期。
let formatter = DateFormatter()
formatter.dateFormat = "E, dd MMM yyyy HH:mm:ss z"
var date = formatter.date(from: "Wed, 03 Aug 2011 09:44:00 +0200")
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用日期对象来获取所需格式的字符串。
| 归档时间: |
|
| 查看次数: |
21977 次 |
| 最近记录: |