我注意到 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/