有没有办法在目标c中找出当前时区日期或时间与系统时间之间的差异

时间:2014-12-10 05:49:21

标签: ios objective-c iphone xcode cllocationmanager

如果用户时间手动更改当前设备的日期或时间,我需要计算当前设备定位的时区时间和系统时间(iphone和ipad)之间的时间差。如果它设置为自动我能够获得,但如果用户手动更改我面临问题的日期或时间。

2 个答案:

答案 0 :(得分:1)

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

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

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

参考链接: NSTimeZone

答案 1 :(得分:0)

当用户更改时区或时间时,您必须小心。

UIApplication.h类中有一个委托方法。

- (void)applicationSignificantTimeChange:(UIApplication *)application;        // midnight, carrier time update, daylight savings time change

AppDelegate.m中覆盖此方法。每当使用更改设备时区时,它都会调用。

因此,您可以将之前的时间存储在NSUserDefaults中,然后在此方法中测量新时间的时差。

还有一个通知观察者UIApplicationSignificantTimeChangeNotification。将此观察者添加到视图控制器。

例如:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(timeChanged:) name:UIApplicationSignificantTimeChangeNotification object:nil];

- (void)timeChanged:(NSNotification *)notification {
}