デバイス時刻を手動で設定し、iOSデバイスの自動時刻同期をオフにすると、[NSDate date]
はデバイス時刻が正しいと仮定して日付と時刻を返します。デバイスの日付と時刻が正確でない場合、実際の日付と時刻を取得するにはどうすればよいですか?
NSDate
にNTPと何らかの同期があると言われているので、デバイスの日付と時刻が正しいと仮定するのではなく、正確な日付と時刻を取得する組み込みの方法があるかどうか疑問です。
デバイス時刻を手動で設定し、iOSデバイスの自動時刻同期をオフにすると、[NSDate date]
はデバイス時刻が正しいと仮定して日付と時刻を返します。デバイスの日付と時刻が正確でない場合、実際の日付と時刻を取得するにはどうすればよいですか?
NSDate
にNTPと何らかの同期があると言われているので、デバイスの日付と時刻が正しいと仮定するのではなく、正確な日付と時刻を取得する組み込みの方法があるかどうか疑問です。
おそらくhttps://github.com/jbenet/ios-ntpはお手伝いできますか?これは、タイムサーバーから日付と時刻を取得できるライブラリです。
私はios-ntpを試しましたが、期待される結果が得られなかったので、うまく機能していて実装が簡単な別のライブラリが見つかりました。
ポッド:
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];
乾杯! :)
私は1つの貴重なチェックは、あなたのアプリケーション(またはそのようなもの)を出荷した日付よりも大きいことを確認することですので、日付がJan 1にリセットされた場合を排除します。 1970年か何か。その場合、メッセージを投げなさい "あなたの時計を設定してください、あなたはばかだ!" (またはその旨の言葉) –
@HotLicksこれは決してOPが尋ねているように時間が正しいことを保証しません。 – twaldron
真実ですが、特に時計の設定が完全に間違っているiPad Touchの多くを捉えています。 –