2013-02-19 180 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]; 

乾杯! :)

相關問題