有时候本地时间不准或者被人为的修改过,这个时候就需要从网络获取时间来校准。
需要用到的jar为:https://commons.apache.org/proper/commons-net/download_net.cgi (本文用的是commons-net-1.4.1.jar)
了解相关ntp的背景:http://support.ntp.org/bin/view/Servers/NTPPoolServers
代码为:
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;
import org.apache.commons.net.ntp.TimeStamp;
public class TimeTest {
public static void main(String[] args) {
System.out.println(new TimeTest().getDateTime());
}
private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* @功能:获取网络最新时间
* @return
*/
public String getDateTime() {
try {
NTPUDPClient timeClient = new NTPUDPClient();
InetAddress timeServerAddress = InetAddress.getByName("pool.ntp.org");
TimeInfo timeInfo = timeClient.getTime(timeServerAddress);
TimeStamp timeStamp = timeInfo.getMessage().getTransmitTimeStamp();
return dateFormat.format(timeStamp.getDate());
} catch (UnknownHostException e) {
e.printStackTrace();
return dateFormat.format(new Date());
} catch (IOException e) {
e.printStackTrace();
return dateFormat.format(new Date());
}
}
}