我使用TidSNTP得到一个时间服务器和本地时钟时间之间的调整时间。在Windows上,它做什么,我希望:德尔福TidSNTP的Android
- 从UTC转换时间服务器的日期时间为当地时间
- 从局部时间服务器的日期时间减去我的时钟的时间
然而,在我的Android设备,不同的东西发生了:
- 服务器的日期时间返回为UTC时间,不是本地时间
- 钍e调整时间返回为(UTC * 2)+调整时间的本地偏移量
有没有其他人遇到过这种情况?建议?
SNTP := TIdSNTP.Create(Self);
try
SNTP.ReceiveTimeout := 5000;
SNTP.Host := 'time.nist.gov';
try
DateTime := SNTP.DateTime;
TimeOffset := SNTP.AdjustmentTime;
SNTPFailed := False;
except
SNTPFailed := True;
end;
SNTP.Active := False;
finally
SNTP.DisposeOf;
SNTP := Nil;
end;
正确的雷米。在Android上下文中,.SyncTime可以调整Android上的时间,但只能在0.14 - 0.17秒之内。 (通过重复的调整和计算检查).adjustmentTime是一个数字,当我处于GMT + 2时区时,对我而言(-4小时)没有意义。 – nolaspeaker 2017-10-04 16:29:22
0.14-0.17秒钟听起来正确。 [RFC 2030](https://tools.ietf.org/html/rfc2030)(其'TIdSNTP'基于)指出:“*这允许一个简单的计算,以确定在服务器和客户端之间的传播延迟* *通常在几十毫秒**相对于服务器*的本地时钟。“至于'AdjustmentTime',它只是返回'FLocalClockOffset'构件,其作为'FLocalClockOffset计算:=((FReceiveTimestamp - FOriginateTimestamp)+(FTransmitTimestamp - FDestinationTimestamp))/ 2;',根据RFC 2030第5 – 2017-10-04 17:45:04
如果你看到2-6小时的值,然后回到我的评论,也许Indy的'TimeZoneBias()'函数在Android上返回错误的值。你是否在我的回答中改变了我的建议?它对原始代码有什么影响吗? – 2017-10-04 17:45:41