【问题标题】:Incorrect locale from dateFormatterdateFormatter 的语言环境不正确
【发布时间】: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


【解决方案1】:

我找到了以下说明,说明如何确保您使用英文名称正确解析日期的月份和日期

除非您特别需要以用户的语言显示月份和/或工作日名称,否则您应该始终使用 en_US_POSIX 的特殊语言环境。这将确保您的固定格式实际上得到完全遵守,并且没有用户设置覆盖您的格式。这也确保月份和工作日名称以英文显示。如果不使用此特殊语言环境,即使您指定 12 小时(或反之亦然),您也可能会获得 24 小时格式。发送到服务器的日期几乎总是需要使用英文。

我找到了on this page的报价

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2019-12-07
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2011-05-12
    • 2016-12-27
    相关资源
    最近更新 更多