【问题标题】:Is there any way to find difference between Current time zone date or time and system time in objective c有没有办法在目标 c 中找到当前时区日期或时间与系统时间之间的差异
【发布时间】:2014-12-10 05:49:21
【问题描述】:

如果用户时间手动更改当前设备日期或时间,我需要计算当前设备所在时区时间与系统时间(iphone 和 ipad)之间的时差。如果它设置为自动,我可以得到,但如果用户手动更改日期或时间,我会遇到问题。

【问题讨论】:

  • 当前设备定位时间和系统时间(iPhone 和 iPad)。你不觉得这两个是一样的吗?
  • 是一样的......只有我的问题来了,实际上我正在计算增量值到达服务器的时间差。如果它是自动的,我会得到准确的时区。但是在更改时区后,用户在之前或之后的几个小时内手动更改了时间。然后在那个时候我需要找到时区来计时多少小时的差异

标签: ios objective-c iphone xcode cllocationmanager


【解决方案1】:

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

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

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

参考链接: NSTimeZone

【讨论】:

    【解决方案2】:

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

    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 {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2015-03-06
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多