我正在运行以下代码:
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年。
编辑:这种情况发生在使用佛教日历的设备上。
答案 0 :(得分:2)
这是因为有问题的设备没有为公历设置。它使用的是佛历。请参阅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)
如果您在整个应用程序中始终如一地执行此操作,您将避免出现奇怪的时区问题(例如,如果纽约的某人现在发布了某些内容,我不希望它在CA中告诉我它发生在三小时前)。< / p>