我在代码中注意到DateFormatter的奇怪行为:
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSSXXXXX"
let dateAsString = "2016-12-28T12:36:14.000Z"
let formattedDate = dateFormatter.date(from: dateAsString)
//formattedDate equals "2016-12-28 00:36:14 UTC"
DateFormatter的行为很奇怪,因为当日期为小时“12”时,问题会出现 ONLY (年,月,日在这里并不重要)。事实上,对于12:00:00 - 12:59:59期间的所有日期,格式化日期会在12小时后转移到午夜。
对于格式化程序运行良好的任何其他日期,让我们说:
dateAsString = "2016-12-28T11:59:41.000Z"
...
formattedDate = "2016-12-28 11:59:41 UTC"
依旧......
这种奇怪行为可能是什么原因?有没有温和的方法(没有检查日期的小时是否等于12,然后在格式化的日期添加12小时)来修复它?
代码是用Swift 3.0编写的,运行的是iOS 10+。所有iOS 10+版本中都会出现此问题。
谢谢!