DateFormatter不返回“HH:mm:ss”的date

这是代码摘录:

func mapping(map: Map) { time <- (map["time"], TransformOf<Date, String>(fromJSON: { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "HH:mm:ss" //dateFormatter.timeZone = TimeZone(abbreviation: "EEST") if let argument = $0 { let date = dateFormatter.date(from: argument) return dateFormatter.date(from: argument) } return nil }} 

$0是string"22:12:00" 。 我把“让date”看看它是什么回报,它是零。 我在这里查找格式代码: http : //waracle.net/iphone-nsdateformatter-date-formatting-table/

代码应该实际工作。 我究竟做错了什么?

编辑 :增加了整个function

编辑2 :我只是注意到它在iPhone 7的iOS 10.1模拟器上正常工作,但返回零我的iPod 10.1.1(2016)。 这太奇怪了。

从技术问答QA1480 – NSDateFormatter和互联网date :

另一方面,如果您使用的是固定格式date,则应首先将date格式化程序的语言环境设置为适合固定格式的语言。 在大多数情况下,最好的语言环境是“en_US_POSIX”,这个语言环境专门用来产生美式英语结果,而不pipe用户和系统的喜好。

这将防止根据用户的区域设置解释date:

 let dateFormatter = DateFormatter() // Set the locale first ... dateFormatter.locale = Locale(identifier: "en_US_POSIX") // ... and then the date format: dateFormatter.dateFormat = "HH:mm:ss" // ... 

另请参见处理NSDateFormatter语言环境“feechur”的最佳方式是什么? 。