gpt4 book ai didi

iOS-ntp 返回与设备相同的值

转载 作者:行者123 更新时间:2023-11-29 10:42:54 26 4
gpt4 key购买 nike

我正在使用 iOS-ntp framework而且我有一种我无法理解的奇怪行为。目前是 13:14,但我在进行对开通话时将设备上的时间更改为 13:34:

NSDate *deviceDate = [NSDate date];
[NetworkClock sharedNetworkClock];
NSDate *networkDate = [NSDate networkDate];
NSLog(@"deviceDate =%@", deviceDate);
NSLog(@"networkDate =%@", networkDate);

我得到的是:

deviceDate  =2014-05-13 13:34:37
networkDate =2014-05-13 13:34:38

显然我期望:

deviceDate  =2014-05-13 13:34:37
networkDate =2014-05-13 13:14:38

如何获得相同的日期值?

提前致谢。

编辑:监听连接我截获了这个从服务器到应用程序的数据包:

Network Time Protocol (NTP Version 3, server)

Reference ID: 212.82.32.15

Reference Timestamp: May 16, 2014 14:56:40.999638000 UTC

Origin Timestamp: May 16, 2014 18:25:02.688373000 UTC

Receive Timestamp: May 16, 2014 15:15:14.862829000 UTC

Transmit Timestamp: May 16, 2014 15:15:14.862889000 UTC

此后框架调用返回 18:25

最佳答案

编辑 结果表明,缺少配置文件并不是本例中的问题。请进一步阅读。

算法中有逻辑决定某些时间戳是无效的;这用于确定时间是否可信。此决定是通过确定服务器时钟设置是否早于 1 小时 做出的。它使用您当前的时间作为引用点。

当我将时钟向前倾斜几个小时时(我目前使用的是 UTC+1(夏令时)),我永远不会同步,因为这个时间总是会至少晚几个小时,即对此的测试永远不会获得好的值(value)。

如果您注释掉检查:

(-[[self dateFromNetworkTime:&ntpServerBaseTime] timeIntervalSinceNow] < 3600.0)

evaluatePacket 方法 NetAssociation.m 中,您可以避免这种检查,并可以获得更大程度的偏移量。我链接了一个 github reference到与主相关的完成此操作的补丁。

一旦您的时钟严重失调,就无法与 NTP 同步可以被认为是一项安全功能,但因为我们只是用它来计算系统时钟和网络时钟之间的增量,所以它不会在这种情况下实际上没有给我们任何东西

在framework中的文档比较少,但是需要将framework resources目录下的ntp.hosts文件复制到使用framework的项目中,并确保该文件作为part复制应用的 Build PhasesCopy Bundle Resources 部分。

如果您不复制该文件,则框架没有可供使用的时间引用,因此永远不会确定要使用的偏移量,从而导致始终使用操作系统时间。

框架的 cocoapods 版本不使用这个配置文件,取而代之的是 networkDateWithServer:(NSString *)server 方法,它允许您明确指定要使用的 NTP 服务器。

The framework could probably react in a more appropriate manner (e.g. logging the lack of the file) rather than just carrying on, but that's a design decision.

关于iOS-ntp 返回与设备相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com