2013-02-19 149 views
7

我注意到,如果我手动设置设备时间,并关闭iOS设备上的自动时间同步,则[NSDate date]会返回日期和时间,假定设备时间正确 - 可能不是这样。如果设备日期和时间不准确,我怎样才能得到实际的日期和时间?

由于文档提到NSDate与NTP有某种同步,所以我想知道是否有任何内置的方式来获取准确的日期和时间,而不必假定设备的日期和时间是正确的。

+0

我发现一个有价值的检查是简单地确保手机的时间值大于您发布您的应用程序的日期(或一些这样),以便您消除日期重置为1月1日, 1970年或其他。在这种情况下,发出一条消息“设置你的时钟,你这个白痴!” (或者说是这个意思。) – 2013-02-19 18:13:03

+0

@HotLicks这样做绝对不会确保OP所要求的时间是正确的。 – twaldron 2013-02-19 18:45:21

+0

的确如此,但是它的出现,特别是很多iPad Touch与时钟设置完全错误。 – 2013-02-19 19:04:08

回答

3

也许https://github.com/jbenet/ios-ntp可以帮到你吗?这是一个可以从时间服务器获取日期和时间的库。

+0

看来这是最简单的方式来做到这一点,在所有可用的选项中。 – Anton 2013-02-25 15:46:49

+0

还有什么其他选择可以解决这个问题? – AppsDev 2013-05-06 14:07:39

0

我试过ios-ntp,但没有得到预期的结果,所以我找到了另一个工作正常,很容易实现的库。

NHNetworkTime

荚:

pod 'NHNetworkTime' 
pod 'CocoaAsyncSocket' 

简单易用 导入这个只要你想得到时间:

#import "NHNetworkTime.h" 

呼叫在同步 - 应用中:didFinishLaunchingWithOptions:从更新时间服务器当您启动应用程序时:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[NHNetworkClock sharedNetworkClock] synchronize]; 
    return YES; 
} 

那么你可以得到网络时间,任何地点时同步完成在源代码:

NSDate *networkDate = [NSDate networkDate]; 

或任何你想要的,当时间更新补充通知重新更新你的UI:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkTimeSyncCompleteNotification:) name:kNHNetworkTimeSyncCompleteNotification object:nil]; 

干杯! :)

相关问题