如何使用互联网时间服务器来获取时间?

2022-09-03 04:12:36

我想获得GMT [格林威治标准时间],我也不想依赖我的系统日期时间。基本上,我想使用时间同步服务器,如 in.pool.ntp.org[印度]进行GMT计算,或者可能是我走错了方向!

如何在Java中执行此操作?

有没有Java库可以从时间服务器获取时间?


答案 1

sp0d 不太对:

timeInfo.getReturnTime(); // Returns time at which time message packet was received by local machine

因此,它只返回当前系统时间,而不是收到的系统时间。请参见 TimeInfo 手册页
您应该使用

timeInfo.getMessage().getTransmitTimeStamp().getTime();

相反。
因此,代码块将是:

String TIME_SERVER = "time-a.nist.gov";   
NTPUDPClient timeClient = new NTPUDPClient();
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime();
Date time = new Date(returnTime);

答案 2

这是我在其他地方找到的代码。我正在使用它。使用apache commons library。

时间服务器列表:NIST 互联网时间服务

 import java.net.InetAddress;
 import java.util.Date;
 import org.apache.commons.net.ntp.NTPUDPClient; 
 import org.apache.commons.net.ntp.TimeInfo;

     public class TimeLookup {

    public static void main() throws Exception {
                String TIME_SERVER = "time-a.nist.gov";   
        NTPUDPClient timeClient = new NTPUDPClient();
        InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
        TimeInfo timeInfo = timeClient.getTime(inetAddress);
        long returnTime = timeInfo.getReturnTime();
        Date time = new Date(returnTime);
        System.out.println("Time from " + TIME_SERVER + ": " + time);
    }
}

返回输出时间::time-d.nist.govSun Nov 25 06:04:34 IST 2012