windows python ntp时间同步问题

关于使用python中ntplib实现ntp时间同步的问题

关于使用python中ntplib实现ntp时间同步的问题

使用os.system()将系统时间修改之后,再查看本机与ntp服务器之间的offset情况,感觉依然很大,但是系统时间明明也修改成功了,这是为什么?

代码来源:https://www.cnblogs.com/xiao-tou-ming/p/15722924.html

import ntplib,os
from time import sleep,strftime,localtime
from datetime import datetime
 
 
def get_ntpserver_time(ntserver):
    ntp_client = ntplib.NTPClient()
    try:
        ntp_stats = ntp_client.request(ntserver)
    except:
        return None,None
    if ntp_stats:
        fmt_time = strftime('%X', localtime(ntp_stats.tx_time))
        fmt_data = strftime(('%Y-%m-%d'), localtime(ntp_stats.tx_time))
        return fmt_time, fmt_data
 
def set_system_datetime(date,time):
    os.system(f'date {date}')
    os.system(f'time {time}')
if __name__=='__main__':
    ntp_sever='ntp.aliyun.com'
    time,date=get_ntpserver_time(ntp_sever)
    if date and time:
        host_cur_datetime=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        set_system_datetime(date,time)
        print(f'已成功将本机时间由{host_cur_datetime}更改为{date} {time},时间戳来源{ntp_sever}')
        # sleep(10)
    else:
        print('出现未知错误!!!!!!')

运行结果及offset情况

img

img

几个问题:

1.是我查看时间的方式不对吗?
2. 根据我们之前实用的情况,NTP时间同步理论上达到毫秒级的精度是完全没问题,但是实用的时候同步的offset经常实在好几百毫秒,这是为啥?
2.我做这个的本意是想通过通过ntp发回的时间ntp_stats.tx_time直接修改系统时间达到时间同步,或者获取到ntpserver的offset情况,用这个offset量对本地系统时间做补偿来修改本地时间达到时间同步,但是我突然想到,既然NTP能获取client到server的offset情况,那为什么当初设计NTP的人不直接用offset让他做到完全同步呢?或许我的这个想法本身就是个无解的问题?!