ISO8601DateFormatter不能将字符串转换为日期

问题描述 投票:0回答:1

我有这个日期时间字符串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")
}

但是无法正确转换。

知道为什么会这样吗?

Demo project

ios swift nsdateformatter iso8601
1个回答
0
投票

默认情况下,格式化程序初始化为使用GMT时区,RFC 3339标准格式(“ yyyy-MM-dd'T'HH:mm:ssZZZZZZZ”)和以下选项:withInternetDateTime,[C0 ],withDashSeparatorInDatewithColonSeparatorInTime

显然,您的日期不是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")
}
© www.soinside.com 2019 - 2024. All rights reserved.