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