swift - 如何在 Swift 5.3 中解析 ISO 8601 日期字符串?
问题描述
我试过使用ISO8601DateFormatter
,但这似乎没有按预期工作:
let formatter = ISO8601DateFormatter()
formatter.date(from: "2020-11-16T12:31:43Z") // returns nil
除此之外,将 a 格式化Date
为 ISO 8601 字符串并将其解析回来似乎不起作用:
formatter.date(from: formatter.string(from: Date())) // returns nil
这是Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1)
在 macOS 10.15.6 上使用 Swift REPL。
我可以使用DateFormatter
手写格式,但如果可能的话,我宁愿避免这种情况。是否有解析 ISO 8601 字符串的标准方法?为什么格式化字符串并解析它不起作用?
编辑:为清楚起见,这是我完整的 REPL 会话,其中包含我输入的确切代码,并且输出未更改。
Welcome to Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1).
Type :help for assistance.
1> import Foundation
2> let formatter = ISO8601DateFormatter()
formatter: ISO8601DateFormatter = {
baseNSFormatter@0 = {
baseNSObject@0 = {
isa = NSISO8601DateFormatter
}
}
_formatter = {}
_timeZone = "GMT"
_formatOptions = 1907
}
3> formatter.formatOptions = .withInternetDateTime
4> formatter.date(from: "2020-11-16T12:31:43Z")
$R0: Date? = nil
5> formatter.date(from: formatter.string(from: Date()))
$R1: Date? = nil
我也尝试过formatter.formatOptions = [.withInternetDateTime]
,formatter.formatOptions.insert(.withInternetDateTime)
但没有成功。