NSDateFormatter return IOS10 中没有

NSDateFormatter return nil in IOS10

当 运行 在 iOS 10 上时,以下代码在 XCode 8 中崩溃(在以前的 iOS 版本上不会崩溃):

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
dateFormatter.locale = NSLocale.currentLocale()


let date = dateFormatter.dateFromString("2016-09-04T08:32:46.195514289Z")!

崩溃的发生是因为日期格式化程序returns 为零。我尝试播放和更改日期格式,但结果始终为零。 iOS 10 有什么变化吗?

编辑:当 运行 Swift 3 时,相同的代码在 Storyboard 中工作。似乎问题发生在 Swift 2.3 和 iOS 10

我在 Playground 中测试了您的代码(必须将其转换为 Swift 3 才能执行此操作)并且它有效。但我注意到,在 Swift 3 中,timeZone 是这样初始化的:

TimeZone(abbreviation: "UTC")

此初始化器在 NSTimeZone 中也可用,您可以在 Swift 2.x 中使用它。根据 Apple 的文档,当您使用 "UTC" 或 "GMT" 之类的名称作为名称时,这将是正确的初始化程序。我不确定,我们应该如何处理 init(name:)

适合我。虽然我用的是 Swift 3:

let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'"
df.timeZone = TimeZone(abbreviation: "UTC")
df.locale = NSLocale.current
let date = df.date(from: "2016-09-04T08:32:46.195514289Z")
print("date: \(date)")

打印:

date: Optional(2016-09-04 08:32:46 +0000)