【问题标题】:DateFormatter gives different dates for iOS 11 and iOS 10DateFormatter 为 iOS 11 和 iOS 10 提供不同的日期
【发布时间】:2018-06-14 06:15:00
【问题描述】:

问题

iOS 模拟器 10.3.1 上显示的日期(对我而言)比 iOS 模拟器 11.2 和装有 iOS 11.2 的 iPhone 6 Plus(真实设备)上显示的日期晚一小时。

想要的结果

所有日期都应显示日期4 Jan 2018 14:32相对于结果下的日期。

代码

我已经设法使用以下代码重现了该错误:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "d MMM yyyy HH:mm"
label.text = dateFormatter.string(from: Date())

结果

这些是我在不同设备上看到的日期(挪威日期):

  • 带有 iOS 11.2 的 iPhone 6 Plus(真实设备):4 Jan 2018 14:32
  • 带有 iOS 11.2 的 iPhone 5S(模拟器):4 Jan 2018 14:32
  • 带有 iOS 10.3.1 的 iPhone 5S(模拟器):4 Jan 2018 13:32

【问题讨论】:

  • 您对修复有什么想法吗?我已经将我的应用程序本地化为挪威语,因此任何需要添加空 Strings.strings 文件的解决方案都与我无关。
  • 您是否尝试过设置dateFormatter 的locale 和timeZone?
  • 是的,我尝试了很多方法来设置这些属性,但没有成功。将在发布的答案中尝试第二种可能的解决方案。谢谢!
  • 遇到同样的问题,stackoverflow.com/questions/51646888/…,你有什么解决办法吗?

标签: ios nsdateformatter


【解决方案1】:

试试这个(设置本地):

formatter.timeZone = TimeZone.current

或者这个(设置系统):

formatter.timeZone = TimeZone.ReferenceType.system

【讨论】:

  • 我已经尝试了第一个可能的解决方案,但没有尝试过第二个,但我必须在明天或后天回复您——我必须在运行 iOS 的真实设备上尝试10 在我可以肯定地说它有效之前。不过感谢您的帮助!
  • 我看到我的应用程序中的日期晚了一小时,但模拟器中的系统时钟也是如此。因此,应用程序中的日期相对于模拟器的时钟是正确的。那么它工作正常吗?我尝试在模拟器中更改系统语言和地区,但时钟仍然落后一小时。
  • 如果模拟器中的系统时钟落后一小时,那么它是否正常工作。如果你想改变模拟器的时钟,你需要改变你的mac的时钟(模拟器的时钟=系统的时钟)
  • 奇怪的是,时钟在 iOS 11 上是正确的。但是在this Apple 论坛帖子中,有几个人说他们在 iOS 10 上得到了错误的日期,但在 iOS 11 上是正确的,所以它是似乎不仅仅是我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2018-03-06
  • 1970-01-01
  • 2018-03-26
  • 2014-10-22
相关资源
最近更新 更多