windows搭建ntp时间服务器

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

参加文献

  • windows搭建ntp时间服务器
  • 全球可用的NTP服务器列表与解析服务

注意事项

  1. 执行net stop w32time && net start w32time报错
    错误描述:"时间服务器未启动"
    解决方案:直接执行net start w32time

  2. 执行 net start w32time 报错
    错误描述:"发生系统错误 5 拒绝访问"
    解决方案:以管理员权限运行。【开始】--->搜索"cmd"--->右键“以管理员身份运行”,或者使用快捷键【win+x+a】

java获取NTP服务器时间,修改系统时间

  1. 依赖

      commons-net
      commons-net
      3.3

  1. 代码
    注意
    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);
            }
        }
    }

转载于:https://my.oschina.net/Cubicluo/blog/3031887

你可能感兴趣的:(windows搭建ntp时间服务器)