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