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

标签 ios swift dateformatter

我注意到 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 的语言环境明确设置为 en_US,它会返回正确的值。

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

此外,在我将手机的地区更改为美国后,它可以正确返回,即使我将其更改回罗马尼亚也能正常使用。我尝试重启手机,但它仍然有效。

该问题仅出现在 iOS 11 上,没有更改代码,根据我的测试,它在 Swift 和 Objective-C 中都存在。

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

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

最佳答案

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

关于ios - DateFormatter 在 iPhone 上返回 nil,但在模拟器上不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624825/

相关文章:

objective-c - 如何使用 UIScrollView 或 UITableView 设计和创建 GridView

ios - NSDateFormatter,显示所有时区的相同日期

swift - 带时间类型的日期选择器

Swift 日期时区问题

ios - 从字符串转换为日期时,日期格式化程序减去一年并更改日期

iphone - 在 didSelectRowAtIndexPath 上显示加载图像

iphone - 呈现 subview Controller 时,父 View Controller 不旋转

ios - 延迟的 Alamofire 请求

ios - 更新后的plist数据

ios - UICollectionView 使用 UICollectionViewFlowLayout 删除分节符