DateFormatter 为简单的日期字符串返回 nil 日期
DateFormatter is returning nil date for a simple date string
我遇到了一个问题,我尝试通过 DateFromatter 将字符串转换为日期,除了 'nil' 什么也没有产生,而且我不知道哪里出错了。代码尽可能简单:
let testDate = "2021"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy"
formatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = formatter.date(from: testDate)
请注意,这比原来简单得多,我要格式化的日期实际上是:
"2021-05-01T01:00:00Z"
但我已将其剥离以缩小问题所在的范围。
正如您从上面看到的,我已经精简到一年,使用 en_US_POSIX 配置 DateFormatter 并仅使用 'yyyy' 作为格式。这在 Playgrounds 中有效,但在我的 Xcode 模拟器(在美国语言环境中)或我自己的物理 iPhone(设置为英国语言环境)中不起作用。话虽这么说,我不知道为什么语言环境会很重要,因为有问题的字符串只是一年 - 它甚至没有错误的年份,只是零。
我不确定我哪里出错了。
请为日期字符串使用像这样的正确格式:
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
而不是:
formatter.dateFormat = "yyyy"
具有特定格式的每个日期字符串,如下面的代码:
let testDate = "2021"
formatter.dateFormat = "yyyy"
或
let testDate = "2021-05-01T01:00:00Z"
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
有关详细信息,请参阅此 link:
Xcode 调试器有一个 bug as you can see in this 即使在解析日期成功时它也会将可选日期显示为 nil。如果您打印可选日期,您将看到结果日期。
我遇到了一个问题,我尝试通过 DateFromatter 将字符串转换为日期,除了 'nil' 什么也没有产生,而且我不知道哪里出错了。代码尽可能简单:
let testDate = "2021"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy"
formatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = formatter.date(from: testDate)
请注意,这比原来简单得多,我要格式化的日期实际上是:
"2021-05-01T01:00:00Z"
但我已将其剥离以缩小问题所在的范围。
正如您从上面看到的,我已经精简到一年,使用 en_US_POSIX 配置 DateFormatter 并仅使用 'yyyy' 作为格式。这在 Playgrounds 中有效,但在我的 Xcode 模拟器(在美国语言环境中)或我自己的物理 iPhone(设置为英国语言环境)中不起作用。话虽这么说,我不知道为什么语言环境会很重要,因为有问题的字符串只是一年 - 它甚至没有错误的年份,只是零。
我不确定我哪里出错了。
请为日期字符串使用像这样的正确格式:
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
而不是:
formatter.dateFormat = "yyyy"
具有特定格式的每个日期字符串,如下面的代码:
let testDate = "2021"
formatter.dateFormat = "yyyy"
或
let testDate = "2021-05-01T01:00:00Z"
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
有关详细信息,请参阅此 link:
Xcode 调试器有一个 bug as you can see in this