デバイスの時刻を手動で設定し、iOSデバイスで自動時刻同期をオフにすると[NSDate date]
、デバイスの時刻が正しいと仮定して日付と時刻が返されることに気付きました。これは正しくない場合があります。
ドキュメントNSDate
にはNTPとの同期があると記載されているので、デバイスの日付と時刻が正しいと想定する代わりに、正確な日付と時刻を取得する組み込みの方法があるかどうか疑問に思います。
おそらくhttps://github.com/jbenet/ios-ntpが役に立ちますか?タイムサーバーから日付と時刻を取得できるライブラリです。
ios-ntpを試しましたが、期待どおりの結果が得られなかったため、正常に動作し、実装が非常に簡単な別のライブラリを見つけました。
ポッド:
pod 'NHNetworkTime'
pod 'CocoaAsyncSocket'
使いやすい時間を取得したいときはいつでもこれをインポートします。
#import "NHNetworkTime.h"
synchronize inを呼び出します-アプリケーション: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];
乾杯 !!!:)