NTP

SNTP是简单网络时间协议(Simple Network Time protocol)的简称,它是目前Internet网上实现时间同步的一种重要工程化方法。
SNTP协议采用客户/服务器工作方式,服务器通过接收GPS信号或自带的原子钟作为系统的时间基准,客户机通过定期访问服务器提供的时间服务获得准确的时间信息,并调整自己的系统时钟,达到网络时间同步的目的。客户和服务器通讯采用UDP协议,端口为123。

验证ntp服务:ntpq -p
查看当前时间:date -R

查找当前地区最适合的时间服务器:打开网站 http://www.pool.ntp.org/zone/asia,会在页面上部推荐一组最合适的同步服务器。在配置ntp服务时可以把它们复制粘贴到etc/ntp.conf中。

对时请求时设置超时时间在1秒内,超时即对时不成功,保证时间精度。
https://blog.csdn.net/hexiangqwqwqw/article/details/49801573
CentOS下NTP时间服务器搭建
http://blog.51cto.com/superpcm/2089888
Centos7配置ntp时间服务器
https://blog.csdn.net/zzy5066/article/details/79036674
docker 搭建ntp服务器
https://www.cnblogs.com/liubin0509/p/6282858.html

java实现NTP客户端

添加依赖commons-net

<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>

获取时间

String getDateTime(){
        try {
            NTPUDPClient timeClient = new NTPUDPClient();
            InetAddress timeServerAddress = InetAddress.getByName("cn.pool.ntp.org");
            TimeInfo timeInfo = timeClient.getTime(timeServerAddress);
            TimeStamp timeStamp = timeInfo.getMessage().getTransmitTimeStamp();
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return dateFormat.format(timeStamp.getDate());
        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.out.println("与ntp服务器同步时间错误!");
            return dateFormat.format(new Date());
        } catch (IOException e) {
            System.out.println("与ntp服务器同步时间错误!");
            return dateFormat.format(new Date());
        }
    }

发表评论