ios - DateFormatter 在 iPhone 上返回 nil,但在模拟器上不返回
问题描述
我注意到 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”,并希望它能解决问题。
有人遇到过这种情况么?还有另一种方法可以解决这个问题吗?
解决方案
我有同样的问题。尝试了我可以在这里找到的几乎所有可能的解决方案,但仍然没有用。因此,出于某种奇迹,我看到一条评论说“将字符串转换为日期时,字符串必须与格式化程序描述完全匹配”,我将日期格式化程序的格式更改为日期字符串并且它起作用了。希望这可以帮助。
推荐阅读
- c# - Azure Cosmos DB - 错误“需要跨分区查询但已禁用”
- angular - 如何知道哪个页面用于调用特定组件?
- r - 是否可以将笔记本电脑作为服务器在无线网络(而不是 LAN)上全局托管应用程序?
- webdriver - 如何使用保护器在 codecept.conf.js 上添加 Microsoft Edge 浏览器
- python - Python MongoEngine 解析从数据库返回的 JSON 化的 DateTimeField
- graph - 依赖关系,参考 - 依赖关系图中节点周围的词汇表
- image - 计算文档图像中的白斑度量
- api - Docker 引擎 api 创建具有特权模式的容器
- r - R:来自 lm(y~x, data) 的 Abline 不适合我的数据
- python - Vispy 转盘相机 - 滚动选项不起作用