DateFormatter在iPhone上返回nil,但在模拟器

时间:2018-05-31 12:52:39

标签: ios swift dateformatter

我注意到iOS 11.3上有关DateFormatter的奇怪情况。我正在尝试使用以下代码将String转换为Date:

    let dateString = "2018-05-31 11:45:24Z"
    let dateFormat = "yyyy-MM-dd HH:mm:ss'Z'"

    var dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateFormat
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

    let date = dateFormatter.date(from: dateString)

奇怪的是,在模拟器上它可以工作,但在我的iPhone上却没有(日期为零)。 根据我的注意,模拟器上的dateFormatter的语言环境是en_US,在我的iPhone上它是en_RO。

如果我将DateFormatter的Locale显式设置为en_US,则返回正确的值。

    dateFormatter.locale = Locale(identifier: "en-US")

更重要的是,在我将手机的地区更改为美国后,它又恢复正常,即使我将其更改回罗马尼亚也能正常工作。我尝试重新启动手机,但它仍然有效。

这个问题只出现在iOS 11上,没有代码和代码的变化,而且我测试过,它都是在Swift和Objective-C中。

这导致我的申请中出现问题。我可以强迫Locale进入" en-US"并希望它解决了这个问题。

还有其他人遇到过这个吗?还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。尝试了我在这里可以找到的几乎所有可能的解决方案,但是仍然没有用。 因此,我奇迹般地看到了一条评论,说 “当将字符串转换为日期时,字符串必须与格式描述完全匹配” ,然后将dateformatter的格式更改为日期字符串,它的工作原理。 希望这会有所帮助。