NSTimeZone:localTimeZone和systemTimeZone有什么区别?

时间:2009-10-06 17:31:05

标签: objective-c iphone cocoa

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

我的测试:

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
NSLog(@"System Time Zone %@",[[NSTimeZone systemTimeZone] name]);

2 个答案:

答案 0 :(得分:52)

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

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

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

答案 1 :(得分:23)

The docs为这类事情提供了大量有用的信息。在这种情况下,他们说:

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