2013-02-19 20 views
7

デバイス時刻を手動で設定し、iOSデバイスの自動時刻同期をオフにすると、[NSDate date]はデバイス時刻が正しいと仮定して日付と時刻を返します。デバイスの日付と時刻が正確でない場合、実際の日付と時刻を取得するにはどうすればよいですか?

NSDateにNTPと何らかの同期があると言われているので、デバイスの日付と時刻が正しいと仮定するのではなく、正確な日付と時刻を取得する組み込みの方法があるかどうか疑問です。

+0

私は1つの貴重なチェックは、あなたのアプリケーション(またはそのようなもの)を出荷した日付よりも大きいことを確認することですので、日付がJan 1にリセットされた場合を排除します。 1970年か何か。その場合、メッセージを投げなさい "あなたの時計を設定してください、あなたはばかだ!" (またはその旨の言葉) –

+0

@HotLicksこれは決してOPが尋ねているように時間が正しいことを保証しません。 – twaldron

+0

真実ですが、特に時計の設定が完全​​に間違っているiPad Touchの多くを捉えています。 –

答えて

3

おそらくhttps://github.com/jbenet/ios-ntpはお手伝いできますか?これは、タイムサーバーから日付と時刻を取得できるライブラリです。

+0

これは、すべての利用可能なオプションのうち、これを実行するのが最も簡単な方法です。 – Anton

+0

この問題を解決するために他にどのような選択肢がありますか? – AppsDev

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]; 

乾杯! :)

関連する問題