问题描述
我遇到了一个问题,尝试通过 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(设置为英国语言环境)中不起作用。话虽如此,我不知道为什么语言环境会很重要,因为有问题的字符串只是一年 - 它甚至没有错误的年份,只是零。
我不确定我哪里出错了。
解决方法
Xcode Debugger 有一个 bug,正如您在此 post 中看到的那样,即使解析日期成功,它也会将可选日期显示为 nil。如果您打印可选日期,您将看到结果日期。
,请为日期字符串使用正确的格式:
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"
有关详细信息,请参阅此链接:https://stackoverflow.com/a/52297497/5140621