NSTimeZone:localTimeZone和systemTimeZone有什么区别?

Gai*_*arx 40 iphone cocoa objective-c

在NSTimeZone类下,有+ localTimeZone和+ systemTimeZone.我在iphone模拟器上做了一个测试,都返回NSTimeZone对象,指示相同的时区.有什么不同?我应该用哪一个来找出iPhone的时区设置?谢谢

我的测试:

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
NSLog(@"System Time Zone %@",[[NSTimeZone systemTimeZone] name]);
Run Code Online (Sandbox Code Playgroud)

Bar*_*ark 52

用户(或您的应用程序或其他应用程序)可以随时更改应用程序的默认时区(使用+[NSTimeZone setDefaultTimeZone])或系统时区(使用"系统偏好设置").+[NSTimeZone localTimeZone]返回一个代理,该代理将始终表现为应用程序的当前默认时区,即使该默认值发生更改.您可以更改应用程序的默认时区,使其行为就像它位于不同的时区一样.

+[NSTimeZone systemTimeZone]返回当前系统时区(使用"系统偏好设置"设置).在大多数情况下,这些都是相同的(应用程序启动时应用程序的默认时区设置为系统时区,我相信).

如果您想知道系统的时区设置,您可能想要使用+[NSTimeZone systemTimeZone].如果您只想为您的应用程序使用正确的时区,您可能需要+[NSTimeZone localTimeZone].


Tim*_*Tim 23

对于这类事情,文档是大量有用的信息.在这种情况下,他们说:

  • localTimeZone是当前应用程序的默认时区.这可以由用户设置或在应用程序中以编程方式设置(或者可能以其他方式).它基本上是指向defaultTimeZone间接层的指针; 如果默认时区更改,localTimeZone 也会更改.
  • systemTimeZone另一方面,是核心系统使用的时区.如果系统时区在应用程序执行期间发生更改,则此缓存值不会更改,这与此不同localTimeZone.

  • 实际上它会缓存它,你调用reset来重新加载它. (2认同)