是否可以从iphone GPS获取原子钟时间戳?

Max*_*007 8 iphone gps gps-time

我正在寻找一种可靠的方式来获得时间.它不能被篡改,它需要脱机工作.所以没有互联网时间,设置中没有用户时间设置,也没有上次重启后的BSD正常运行时间.我想知道,因为GPS使用原子钟工作,我是否可以访问该信息.

谢谢

Joh*_*hnK 7

这可以获得GPS时间:

#import <CoreLocation/CoreLocation.h>

CLLocation* gps = [[CLLocation alloc]
                       initWithLatitude:(CLLocationDegrees) 0.0
                       longitude:(CLLocationDegrees) 0.0];
NSDate* now = gps.timestamp;
Run Code Online (Sandbox Code Playgroud)

但它似乎并不是防篡改的.

我在飞机模式(iOS 6.1)的iPhone 4上尝试了这个代码,即使这样,它也可以提供时间.但不幸的是,这一次似乎随系统时钟而变化.啊.

我发现(仍处于飞行模式)的有趣的事情是,如果你篡改系统时钟(转到off时间和日期后Set Automatically),然后Set Automatically转回on,机器可以毫无障碍地恢复真实(原始)时间.即使在手机电源循环后,这也能正常工作.如此看来,还有就是类似设备内部维护一个防篡改的时间.但是如何访问这个?

PS 从2010年开始对此进行讨论.倒数第二条评论的作者在一个防辐射庇护所中尝试了这一点:所以很明显电话没有从任何外部来源获得原始时间.

附录,2013年7月

发现了一些关于另一种时间测量的帖子(这里,这里这里):系统内核启动时间.通过这样的电话访问它:sysctlbyname("kern.boottime", &boottime, &size, NULL, 0);.不幸的是,即使没有重启,它也会随着用户调整的数据和时间而变化.另一个功能gettimeofday()同样取决于用户定义的时间.

  • 我检查了一下,发现`gps.timestamp`与`[NSDate date]`返回的时间完全相同. (3认同)

Ben*_*nno -2

这将为您提供当前日期和时间:

NSDate *now = [NSDate date];
Run Code Online (Sandbox Code Playgroud)

这将尽可能可靠。当 iPhone 可以访问 NTP 服务器时,iPhone 上的内部时钟将会更新。如果手机使用 GPS 作为时间同步源,它还将用于更新可通过上述方法访问的同一系统范围时钟。

CoreFoundation 的等价物类似于:

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
Run Code Online (Sandbox Code Playgroud)

它返回相当于正常 UNIX 纪元以来秒数时间戳的 CoreFoundation 值。