参加文献
注意事项
-
执行
net stop w32time && net start w32time
报错
错误描述:"时间服务器未启动"
解决方案:直接执行net start w32time -
执行
net start w32time
报错
错误描述:"发生系统错误 5 拒绝访问"
解决方案:以管理员权限运行。【开始】--->搜索"cmd"--->右键“以管理员身份运行”,或者使用快捷键【win+x+a】
java获取NTP服务器时间,修改系统时间
- 依赖
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
- 代码
注意
a: 建议启动一个新线程去执行,因为有可能会阻塞;
b: ubuntu上测试,需要用sudo权限启动程序,因为执行date -s命令需要sudo权限才能生效;
private class LocalNtpTask implements Runnable {
private Ntp ntp;
public LocalNtpTask(Ntp ntp) {
this.ntp = ntp;
}
@Override
public void run() {
try {
log.info("local ntp start");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
NTPUDPClient timeClient = new NTPUDPClient();
String timeServerUrl = ntp.getUnicastConfigurationList().get(0).getAddress().toString();
InetAddress timeServerAddress = InetAddress.getByName(timeServerUrl);
log.info("local ntp timeServerAddress {}", timeServerAddress);
TimeInfo timeInfo = timeClient.getTime(timeServerAddress);
TimeStamp timeStamp = timeInfo.getMessage().getTransmitTimeStamp();
String timeString = dateFormat.format(timeStamp.getDate());
log.info("local ntp time {}", timeString);
String date = timeString.substring(0, 10);
String time = timeString.substring(11);
Process process1 = Runtime.getRuntime().exec(" date -s " + date); //修改服务器年月日
Process process2 = Runtime.getRuntime().exec(" date -s " + time); //修改服务器时分秒
} catch (Exception e) {
log.error("local ntp error", e);
}
}
}