How can I get the actual date and time if the device date and time are inaccurate?

StackOverflow https://stackoverflow.com/questions/14964318

  •  10-03-2022
  •  | 
  •  

Pergunta

I noticed that if I set my device time manually, and turn off the automatic time sync on my iOS device, [NSDate date] returns the date and time assuming the device time is correct--which it may not be.

Since the docs mention that NSDate has some sort of sync with NTP, I am wondering if there is any built-in way to get the accurate date and time instead of having to assume the device date and time is correct.

Foi útil?

Solução

Perhaps https://github.com/jbenet/ios-ntp can help you? It's a library that can fetch the date and time from a time server.

Outras dicas

I tried ios-ntp but didn't get expected results, so I found another library which is working fine and really easy to implement.

NHNetworkTime

Pods:

pod 'NHNetworkTime'
pod 'CocoaAsyncSocket'

Simple to use Import this whenever you want to get time:

#import "NHNetworkTime.h"

Call synchronize in - application: didFinishLaunchingWithOptions: to update time from server when you launch app:

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

then you can get network time when sync complete in anywhere in your source code:

NSDate *networkDate = [NSDate networkDate];

or add notification to re-update your UI in anywhere you want when time is updated:

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

Cheers !!! :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top