来自dateFormatter的区域设置不正确

时间:2017-09-08 07:12:35

标签: ios swift date locale nsdateformatter

我的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。有趣的是,请求很少(同一时刻来自单个设备),只有其中一个失败 - 日期错误。)

1 个答案:

答案 0 :(得分:0)

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

  

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

我找到了引用on this page