我正在运行以下代码:
if let messagedate = curr_comment["timestamp"] as? String {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = dateFormatter.dateFromString(messagedate)
}
这是调试器输出:
这种情况从今天开始随机发生,我不确定为什么日期会通过如此简单的操作改变 500 年。
编辑:这种情况发生在使用佛教日历的设备上。
最佳答案
这是因为相关设备未设置公历。它使用的是佛教历法。请参阅Apple Technical Q&A 1480其中讨论了如何正确处理日期字符串以优雅地处理国际日历。
如果此 yyyy-MM-dd HH:mm:ss
格式用于内部目的(存储在数据库中、与 Web 服务通信等),则应考虑设置格式化程序的区域设置至 en_US_POSIX
。在 Swift 3 中:
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
在 Swift 2 中:
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
坦率地说,这也引出了一个问题:日期的字符串表示形式正在使用哪个时区。您通常希望确保日期/时间字符串始终以 UTC/GMT 格式存储。在 Swift 3 中:
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
或者,在 Swift 2 中:
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
如果您在整个应用程序中始终如一地这样做,您将避免奇怪的时区问题(例如,如果纽约的某人现在发布了某些内容,我不希望它告诉我在加利福尼亚州它发生在三个小时前)。
关于ios - DateFormatter 将日期更改了 500 年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562517/