我正在将JSON文件中的日期字符串转换为date格式,大多数时候它都能工作,但这个例子失败了,我不知道为什么。任何想法都值得赞赏!非常感谢。
let input = "2015-06-20T00:47:00.484Z"
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.sssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
print("ConvertedOutput: (dateFormatter.date(from: input))")
您的输入是一个符合ISO8601标准的日期字符串。对于此类日期字符串,Foundation有一个ISO8601DateFormatter类,它可以帮助您避免许多可能导致错误日期解析的边缘情况,这就是为什么苹果建议对此类日期字符串使用此专用类,而不是使用DateFormatter。
使用ISO8601DateFormatter的代码
let dateFormatterIso = ISO8601DateFormatter()
dateFormatterIso.formatOptions = [.withFullDate, .withFullTime, .withFractionalSeconds]
let inputDate = dateFormatterIso.date(from: input)
使用DateFormatter的代码
如果您不能使用ISO8601DateFormatter,那么你必须纠正分数秒掩码错误的日期格式:.SSS改为.SSS
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
两个格式化程序都返回:
▿ Optional<Date>
▿ some : 2015-06-20 00:47:00 +0000
- timeIntervalSinceReferenceDate : 456454020.48399997
对于毫秒,您应该使用SSS
而不是像这样的sss
-
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"