我想检查一下系统时钟的时差。这是我的密码:
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包。
问题是,在Windows2008的特定服务器上,我得到了3600作为timeshift,而问题就发生在上周日晚上节省时间的更改之后。我检查了windows的设置和时间似乎是正确的,时区是正确的,而且日光设置是开着的。
您认为这是windows的问题还是我可以检查一些ntp java客户端配置?
1条答案
按热度按时间ee7vknir1#
ntp仅传输基于utc的时间戳。与时区(包括dst)的任何对齐都是在从源接收到utc时间之后完成的。
TimeInfo.getOffset()
返回调整时钟所需的偏移量—远程计算机的utc时间和本地计算机的utc时间之间的差。它完全没有提到时区或夏令时。这就是说,如果它确实移动了一个小时,那么可能是您或远程计算机将utc转换为本地时间,或者反之亦然。既然您说它是windows,那么您应该确保您在windows日期/时间控制面板设置中选择了适当的本地时区,并且没有取消选中“自动调整夏令时时钟”。
当然,也完全有可能源时钟设置不正确。然而,这通常只有在有人手动设置时钟时才会发生。大多数ntp服务器从其他更高层次的ntp服务器上占用时间,因此这种情况不太可能发生。