【问题标题】:DateFormatter/ISO8601DateFormatter can not get date from string [duplicate]DateFormatter/ISO8601DateFormatter 无法从字符串中获取日期 [重复]
【发布时间】:2020-03-29 00:21:37
【问题描述】:

如何使用 ISO8601DateFormatter 将字符串转换为日期?

let iSO8601DateFormatter = ISO8601DateFormatter()
let string = iSO8601DateFormatter.string(from: Date()) //2019-12-04T08:23:27Z
let date = iSO8601DateFormatter.date(from: string)  //nil ?

上面的代码在 iPhone8 模拟器中使用 Xcode 11.2.1 运行,我得到 nil。

但它可以在同一个 Xcode 的 Playground 中工作。

谁能帮我指出我做错了什么?

【问题讨论】:

    标签: swift iso8601


    【解决方案1】:

    在 Xcode11 和 swift 5 中似乎是一个 bug。日期实际上不是 nil,但在调试时显示为 nil。

    let date = Date()
    let formatter = ISO8601DateFormatter()
    formatter.formatOptions = [.withInternetDateTime]
    let dateString = formatter.string(from: date)
    if let myDate = formatter.date(from: dateString){
          print(myDate) //2019-12-08 02:22:26 +0000
    }
    

    您可以在此 SO post 上查看有关该错误的更多信息

    【讨论】:

      【解决方案2】:

      您可以将 iSO8601 日期格式指定给 NSDateFormatter 以获取日期:

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyyMMdd'T'HHmmssZ"
        let date = dateFormatter.date(from: dateString)
        print(date) //2019-12-04 12:46:00 +0000
      

      您可以在here.查看日期格式的类型

      我希望这对你有帮助。

      【讨论】:

      • 感谢您的帮助。我还测试了 DateFormatter:let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US") dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let string = dateFormatter.string(from: Date()) let date = dateFormatter.date(from: string),模拟器中的日期仍然为零,但在 Playground 中有效。
      • @Jungenyan 我检查了你的代码。它在我的模拟器中工作。使用 iOS 设备进行检查。您的代码没有问题。
      • 我在模拟器和我的 iPhone7 中再次检查了我的代码,日期仍然为零。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2017-06-10
      • 2021-05-05
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多