iOS 11 [NSTimeZone localTimeZone]忽略[NSTimeZone defaultTimeZone];

时间:2017-09-30 02:56:53

标签: ios

当我启动我的应用时,我将默认时区设置为GMT [NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

然后,在对[NSTimeZone]的后续调用中,我使用-localTimeZone。在iOS 10之前,一切正常,我将GMT-0作为返回的时区。现在,在iOS 11上,我得到了我的本地时间,即GMT-3。

另外,如果我改为呼叫-defaultTimeZone,我也会得到GMT-0,这是正确的答案。有人提到为什么-localTimeZone改变了它的行为?

1 个答案:

答案 0 :(得分:4)

这是iOS11中的一个错误。我提交了一个雷达,它被Apple标记为“DUPLICATE OF 33629367”(从iOS11.1测试版开始仍然是一个开放的问题)。在大多数情况下,最好停止使用localTimeZone ......这是一个线程噩梦。

事情应该如何运作:

  • [NSTimeZone systemTimeZone]始终返回系统时区。如果系统时区发生变化,则必须重新查询此方法(返回的NSTimeZone不会自动更新)
  • [NSTimeZone defaultTimeZone]返回systemTimeZone,除非设置了defaultTimeZone。如果默认或系统时区发生变化,则必须重新查询此方法(返回的NSTimeZone不会自动更新)
  • [NSTimeZone localTimeZone]返回的时区等于defaultTimeZone返回的时区。如果systemTimeZone或defaultTimeZone发生变化,NSTimeZone会返回DOES自动更新。所以它可以在函数中间更新你。

在iOS11中,[NSTimeZone localTimeZone]似乎相当于[NSTimeZone systemTimeZone]