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

时间:2009-09-18 13:08:37

标签: iphone gps gps-time

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

谢谢

5 个答案:

答案 0 :(得分:7)

这可以获得GPS时间:

#import <CoreLocation/CoreLocation.h>

CLLocation* gps = [[CLLocation alloc]
                       initWithLatitude:(CLLocationDegrees) 0.0
                       longitude:(CLLocationDegrees) 0.0];
NSDate* now = gps.timestamp;

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

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

我发现(仍在飞行模式下)有趣的是,如果您篡改系统时钟(转到off时间和日期Set Automatically后),然后转{{1}返回Set Automatically,机器可以毫无障碍地恢复真实(原始)时间。即使在手机电源循环后,这也能正常工作。所以似乎 类似于设备内部维护的防篡改时间。但是如何访问这个?

P.S。从2010年开始A discussion。倒数第二条评论的作者在一个防辐射棚中尝试了这一点:所以很明显电话没有从任何外部来源获得原始时间。

附录,2013年7月

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

答案 1 :(得分:4)

NSDate和它的CF对应都是基于用户可控时间,因此不是防篡改。

据我所知,没有开放的API直接用于GPS时间或载波时间。但是,您可以检查mach_absolute_time以获得自上次启动以来的未被禁止的时间,并且可能使用它至少知道自应用程序被唤醒以来已经过了多少时间(没有可能被篡改的时间)该应用正在运行。)

mach_absolute_time取决于设备的处理器。它返回自上次重启设备以来的刻度(也称为正常运行时间)。为了以人类可读的形式获取它,您必须通过mach_timebase_info(比率)的结果对其进行修改,该结果将返回十亿分之一秒(或纳秒)。为了使它更有用,我使用如下所示的函数:

#include <mach/mach_time.h>

int getUptimeInMilliseconds()
{
    static const int64_t kOneMillion = 1000 * 1000;
    static mach_timebase_info_data_t s_timebase_info;

    if (s_timebase_info.denom == 0) {
        (void) mach_timebase_info(&s_timebase_info);
    }

    // mach_absolute_time() returns billionth of seconds,
    // so divide by one million to get milliseconds
    return (int)((mach_absolute_time() * s_timebase_info.numer) / (kOneMillion * s_timebase_info.denom));
}

答案 2 :(得分:0)

即使您可以从GPS获取时间,您也应该知道GPS time与UTC不完全相同。 iPhone中的GPS接收器可能会为您解决这个问题。

答案 3 :(得分:-1)

这可以获取当前日期和时间:

NSDate *now = [NSDate date];

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

CoreFoundation的等价物如下:

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();

返回CoreFoundation等效的正常UNIX秒 - 自 - 纪元时间戳。

答案 4 :(得分:-1)

计时的黄金标准是美国和全世界各种政府时间观察站。它们提供原子时间。这在世界范围内使用。 Apple应该使用它。如果要与单元塔同步,则应该有一个备用内部时间。如果塔台或GPS系统出现故障,则所有时间都不正确。