参加文献
注意事项
-
执行
错误描述:"时间服务器未启动" 解决方案:直接执行net start w32timenet stop w32time && net start w32time
报错 -
执行
错误描述:"发生系统错误 5 拒绝访问" 解决方案:以管理员权限运行。【开始】--->搜索"cmd"--->右键“以管理员身份运行”,或者使用快捷键【win+x+a】net start w32time
报错
java获取NTP服务器时间,修改系统时间
- 依赖
commons-net commons-net 3.3
- 代码 注意 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); } } }