【问题标题】:ISO8601DateFormatter not converting a string to dateISO8601DateFormatter 未将字符串转换为日期
【发布时间】:2020-03-10 06:56:06
【问题描述】:
我有这个日期时间字符串 2020-03-09T11:53:39.474Z。我需要将其转换为Date
let dateString = "2020-03-09T11:53:39.474Z"
if let date = ISO8601DateFormatter().date(from: dateString) {
print(dateFormatter.string(from: date))
} else {
print("Could not convert date")
}
但它无法正确转换它。
知道为什么会这样吗?
【问题讨论】:
标签:
ios
swift
nsdateformatter
iso8601
【解决方案1】:
ISO8601DateFormatter 的 designated initialiser init() 这样做:
默认情况下,格式化程序被初始化为使用 GMT 时区、RFC 3339 标准格式(“yyyy-MM-dd'T'HH:mm:ssZZZZZ”)和以下选项:withInternetDateTime、@ 987654325@、withColonSeparatorInTime、withTimeZone。
显然,您的日期不是yyyy-MM-dd'T'HH:mm:ssZZZZZ 格式,因为它有一个毫秒部分。
您只需要添加withFractionalSeconds 选项:
let dateString = "2020-03-09T11:53:39.474Z"
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [
.withInternetDateTime,
.withFractionalSeconds,
.withColonSeparatorInTime,
.withDashSeparatorInDate,
.withTimeZone]
if let date = formatter.date(from: dateString) {
print(date)
} else {
print("Could not convert date")
}
我个人喜欢将选项全部列出以使代码更清晰,但您也可以这样做:
formatter.formatOptions.insert(.withFractionalSeconds)