首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >德尔福TidSNTP安卓

德尔福TidSNTP安卓
EN

Stack Overflow用户
提问于 2014-08-27 16:28:24
回答 1查看 1.2K关注 0票数 1

我使用TidSNTP获取时间服务器和本地时钟时间之间的调整时间。在Windows上,它做了我期望的事情:

  1. 将时间服务器的日期时间从UTC转换为本地时间
  2. 从本地化时间服务器的日期时间中减去我的时钟时间

然而,在我的android设备上,发生了一些不同的事情:

  1. 服务器的日期时间返回为UTC时间,而不是本地时间
  2. 调整时间作为本地偏移量(UTC * 2) +调整时间返回。

还有其他人经历过吗?有什么建议吗?

代码语言:javascript
运行
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2014-08-27 18:02:42

如果要使用TIdSNTP实际同步时钟,则应该调用TIdSNTP.SyncTime(),这是为了处理偏移量。

话虽如此,我认为TIdSNTP.DateTime应该在当地时间表达,而不是UTC。在内部,日期/时间值使用Indy的IdGlobalProtocols.TimeZoneBias()函数进行调整,该函数在所有平台上返回-OffetFromUTC(),但基于Unix的系统(包括Android)除外,后者使用OffsetFromUTC()返回的相同逻辑手动计算偏移量,因此结果与-OffsetFromUTC()返回的结果相反。我觉得有点奇怪。TimeZoneBias()可能应该无条件地在所有平台上使用-OffsetFromUTC()

尝试编辑Indy的IdGlobalProtocols.pas文件,使TimeZoneBias()在所有平台上返回-OffsetFromUTC(),然后重新编译Indy(或者至少将编辑的文件添加到项目中),看看您的问题是否消失:

代码语言:javascript
运行
复制
function TimeZoneBias: TDateTime;
{$IFDEF USE_INLINE} inline; {$ENDIF}
begin
  Result := -OffsetFromUTC;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25532404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档