【问题标题】:DateFormatter returns nil on iPhone, but not on simulatorDateFormatter 在 iPhone 上返回 nil,但在模拟器上不返回
【发布时间】:2018-05-31 12:52:39
【问题描述】:

我注意到 iOS 11.3 上的 DateFormatter 有一个奇怪的情况。我正在尝试使用以下代码将字符串转换为日期:

    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 中都有。

这导致我的应用程序出现问题。我可以强制区域设置为“en-US”,并希望它能解决问题。

有没有其他人遇到过这种情况?有没有其他方法可以解决这个问题?

【问题讨论】:

标签: ios swift dateformatter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2020-01-14
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2018-02-06
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多