首页 > 解决方案 > 如何在 Swift 5.3 中解析 ISO 8601 日期字符串?

问题描述

我试过使用ISO8601DateFormatter,但这似乎没有按预期工作:

let formatter = ISO8601DateFormatter()
formatter.date(from: "2020-11-16T12:31:43Z") // returns nil

除此之外,将 a 格式化Date为 ISO 8601 字符串并将其解析回来似乎不起作用:

formatter.date(from: formatter.string(from: Date())) // returns nil

这是Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1)在 macOS 10.15.6 上使用 Swift REPL。

我可以使用DateFormatter手写格式,但如果可能的话,我宁愿避免这种情况。是否有解析 ISO 8601 字符串的标准方法?为什么格式化字符串并解析它不起作用?

编辑:为清楚起见,这是我完整的 REPL 会话,其中包含我输入的确切代码,并且输出未更改。

Welcome to Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1).
Type :help for assistance.
  1> import Foundation
  2> let formatter = ISO8601DateFormatter()
formatter: ISO8601DateFormatter = {
  baseNSFormatter@0 = {
    baseNSObject@0 = {
      isa = NSISO8601DateFormatter
    }
  }
  _formatter = {}
  _timeZone = "GMT"
  _formatOptions = 1907
}
  3> formatter.formatOptions = .withInternetDateTime
  4> formatter.date(from: "2020-11-16T12:31:43Z")
$R0: Date? = nil
  5> formatter.date(from: formatter.string(from: Date()))
$R1: Date? = nil

我也尝试过formatter.formatOptions = [.withInternetDateTime]formatter.formatOptions.insert(.withInternetDateTime)但没有成功。

标签: swiftmacosnsdateformatter

解决方案


推荐阅读