DateFormatter中午时间错误的日期格式

时间:2016-12-29 08:05:31

标签: ios swift date nsdateformatter ios10

我在代码中注意到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+版本中都会出现此问题。

谢谢!

0 个答案:

没有答案