如何从Java中的外部Web服务获得以纳秒为单位的时间?

时间:2016-11-06 16:25:52

标签: java web-services time

是否有一个web服务将时间返回到可以从java调用的纳秒点?  我需要一个能给我时间的外部资源。在我的java应用程序中,我调用了System.nanoTime();但我需要从服务器调用时间进行其他计算。

由于

1 个答案:

答案 0 :(得分:0)

网络时间协议(NTP)允许同步计算机系统的时钟。您可以连接到任何NTP服务器以请求当前时间

包apache commons中的NTPUDPClient提供了一个NTP客户端

使用

import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;


public long getRemoteNTPTime() {
    NTPUDPClient client = new NTPUDPClient();
    // We want to timeout if a response takes longer than 5 seconds
    client.setDefaultTimeout(5000);
    //NTP server list
    for (String host : hosts) {

        try {
            InetAddress hostAddr = InetAddress.getByName(host);
            TimeInfo info = client.getTime(hostAddr);
            return info.getMessage().getTransmitTimeStamp().getTime();

        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    client.close();

    return null;

}

配置多台主机,以避免一台主机出现故障。寻找托管附近的服务器以减少网络延迟。例如

ntp02.oal.ul.pt 
ntp04.oal.ul.pt 
ntp.xs4all.nl