DST时间更改后的NTP时间检查错误

时间:2017-10-31 18:11:39

标签: java apache-commons dst ntp

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

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客户端配置?

1 个答案:

答案 0 :(得分:0)

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

TimeInfo.getOffset()返回调整时钟所需的偏移量 - 远程计算机的UTC时间与本地计算机的UTC时间之间的差值。它根本没有说明时区或夏令时。

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

当然,完全可能的是源时钟设置不正确。但是,通常只有在有人手动设置时钟时才会发生这种情况。大多数NTP服务器从其他更高层的NTP服务器中抽出时间,因此不太可能。