首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在Java中通过NTP客户端同步系统时钟?

是否可以在Java中通过NTP客户端同步系统时钟?
EN

Stack Overflow用户
提问于 2016-11-11 10:24:30
回答 1查看 1.9K关注 0票数 1

或者只知道系统时钟和服务器之间的偏移量?如果我的系统时钟因时区而与服务器不同,会发生什么情况?谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-11-30 10:22:12

Java没有直接设置系统时钟的API。这可以在从Java类调用的C/C++本机代码中完成,但需要管理员权限才能执行。

有一些Java库可以计算本地系统时钟和远程Apache Commons Net服务器之间的时钟偏移,比如NTP项目。这提供了计算偏移量而不同步本地时钟的代码。要实际同步,建议使用NTP客户端/服务器执行此操作。几乎所有平台(Windows、Mac、Linux等)都有NTP实施

Java库和NTP服务使用基于UTC的时间,因此时区设置不起作用。

示例:

代码语言:javascript
复制
NTPUDPClient client = new NTPUDPClient();
client.open();
// use host name or IP address of target NTP server
InetAddress hostAddr = InetAddress.getByName("pool.ntp.org");
TimeInfo info = client.getTime(hostAddr);
info.computeDetails(); // compute offset/delay if not already done
Long offsetValue = info.getOffset();
Long delayValue = info.getDelay();
String delay = (delayValue == null) ? "N/A" : delayValue.toString();
String offset = (offsetValue == null) ? "N/A" : offsetValue.toString();

System.out.println(" Roundtrip delay(ms)=" + delay
                + ", clock offset(ms)=" + offset); // offset in ms
client.close();

请注意,本地时钟偏移(或时间漂移)是根据此标准NTP方程相对于本地时钟和NTP服务器的时钟计算的。

代码语言:javascript
复制
LocalClockOffset = ((ReceiveTimestamp - OriginateTimestamp) +
                             (TransmitTimestamp - DestinationTimestamp)) / 2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40540207

复制
相关文章

相似问题

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