【发布时间】:2018-02-17 00:53:30
【问题描述】:
我的 DateFormatter 有问题。
我的 iOS 应用程序与服务器通信并使用 If-Modified-Since 标头和使用以下格式化程序创建的日期:
modifiedSinceDateFormatter = DateFormatter()
modifiedSinceDateFormatter!.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
modifiedSinceDateFormatter!.locale = Locale(identifier: "en_US")
modifiedSinceDateFormatter!.timeZone = TimeZone(abbreviation: "GMT")
它按预期工作 - 以下列格式返回日期:Fri, 08 Sep 2017 07:02:20 GMT。
但我正在查看服务器日志,发现一旦使用以下日期格式发出请求 sob., 26 sie 2017 10:17:01 CEST(这是正确的波兰语言环境和时区 - 我希望我的用户使用波兰语言环境)。
所以我的问题是: 这个格式化程序怎么可能在错误的语言环境中返回日期?用户是否可以激活一些选项来覆盖此区域设置(如辅助功能选项)?会不会是越狱设备?
编辑:它又发生了:wt., 17 kwi 2018 08:40:02 CEST。有趣的是,很少有请求(同时来自单个设备),只有一个请求失败 - 日期错误)。
【问题讨论】:
-
您确定您的服务器(或日志)没有将 UTC 日期显示/转换为服务器所在位置的本地化格式吗?有时,如果服务器在波兰,则服务器开发人员将 UTC 日期(可能是某些 UI 工具)翻译为不会“在心理上删除/添加时间”,这对服务器开发人员很有用。
-
@Larme 不,不是这样(如果是这样,应该有更多类似的日志)。应用程序与服务器通信已有一段时间了,我没有发现这个问题。而且,它发生过一次。在此事件发生时,iOS 或服务器代码没有任何更新。也许这与云提供商的一些更新巧合。这可能不是 iOS 应用程序故障,但也许有人观察到类似的情况。
-
查看Apple's documentation 可能的解决方案是使用 POSIX 语言环境,所以“en_US_POSIX”(我刚刚意识到这个问题已经很老了)
-
是的,问题很老,但我仍然不知道如何解决所描述的问题。我今天用新的错误编辑了问题(同样的情况)。谢谢你的建议,我去看看。但对我来说最有趣的问题是“为什么会这样?” :)
标签: ios swift date locale nsdateformatter