【问题标题】: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】:

    ISO8601DateFormatterdesignated initialiser init() 这样做:

    默认情况下,格式化程序被初始化为使用 GMT 时区、RFC 3339 标准格式(“yyyy-MM-dd'T'HH:mm:ssZZZZZ”)和以下选项:withInternetDateTime、@ 987654325@、withColonSeparatorInTimewithTimeZone

    显然,您的日期不是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)
    

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 2015-04-27
      • 2011-11-28
      • 2016-05-03
      相关资源
      最近更新 更多