【问题标题】:NTP time check error after DST time changeDST 时间更改后 NTP 时间检查错误
【发布时间】:2018-04-13 00:17:13
【问题描述】:

我想检查系统时钟的时移。这是我的代码:

NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(5000);
client.open();
TimeInfo info = client.getTime(InetAddress.getByName("ntp1.inrim.it"));
info.computeDetails();
long offset=info.getOffset()==null?0:info.getOffset();

NTPClient 类来自 org.apache.commons.net.ntp 包。

问题在于,在装有 Windows 2008 的特定服务器中,我将 3600 作为时移,而问题发生在上周日晚上的 DaySaving 时间更改之后。 我检查了 windows 设置,时间似乎是正确的,时区是正确的,而且日光设置也打开了。

您认为这是 Windows 问题还是我可以检查一些 NTP java 客户端配置?

【问题讨论】:

  • 您的 Java 安装最近多久更新了? Java 在 Java 中维护时区信息 - 它不使用 O/S 时区。
  • Java v. 1.8 已于 10 月更新。 Java 如何知道我的安装位置选择了正确的时区?

标签: java apache-commons dst ntp


【解决方案1】:

NTP 仅传输基于 UTC 的时间戳。任何与时区(包括 DST)的对齐都是在从源接收到 UTC 时间之后完成的。

TimeInfo.getOffset() 返回调整时钟所需的偏移量 - 远程计算机的 UTC 时间和本地计算机的 UTC 时间之间的差异。它完全没有说明时区或 DST。

也就是说,如果它确实偏移了一个小时,那么您或远程计算机可能正在从 UTC 转换为本地时间,反之亦然。既然你说它是 Windows,你应该确保你在 Windows 日期/时间控制面板设置中选择了适当的本地时区,并且你有没有取消选中“自动调整夏令时时钟” .

当然,源时钟设置不正确也完全有可能。但是,这通常只有在有人手动设置时钟时才会发生。大多数 NTP 服务器从其他一些更高层的 NTP 服务器中获取时间,因此这种可能性较小。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2017-08-05
    • 1970-01-01
    • 2019-01-18
    • 2012-08-16
    • 2011-08-23
    • 1970-01-01
    • 2010-11-26
    • 2011-12-18
    相关资源
    最近更新 更多