如何使用pythontplib将服务器时间缩短到毫秒级?

2024-09-26 04:44:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个python模块,它将从一个选择的NTP池服务器输出时间到毫秒精度,作为展示服务器时间戳如何变化的练习。到目前为止,我已经能够打印出源服务器的时间戳精度在一秒钟之内,但是如何才能获得毫秒精度呢?在

ntp_pool = '0.pool.ntp.org', \
       'uk.pool.ntp.org', \
       'ie.pool.ntp.org'

def get_ntp_time():
    for item in ntp_pool:
        call = ntplib.NTPClient()
        response = call.request(item, version=3)
        print(time.ctime(response.orig_time))

Tags: 模块org服务器timeresponse时间精度call
2条回答

for循环可能会给结果着色,因为在每次迭代中都会有时间流逝。在

在任何情况下,ntp响应是一个具有微秒精度的时间戳,因此限制似乎在^{}之内,这只会下降到秒精度

您可以使用^{}代替,也可以选择使用strftime使其更漂亮。我的示例半心半意地模拟了现有代码的输出。在

from datetime import datetime

def get_ntp_time():
for item in ntp_pool:
    call = ntplib.NTPClient()
    response = call.request(item, version=3)
    t = datetime.fromtimestamp(response.orig_time)
    print(t.strftime("%a %b %d %H:%M:%S.%f"))

我认为这里有点误导:response.orig_time是发出请求的客户端的时间,而不是服务器的时间。参见IETF RFC5905,p.23:“origintimestamp(org):请求离开服务器时客户端的时间[…]”。代码的最新版本应该类似于

import ntplib
from datetime import datetime, timezone

NTP_SERVERS = ['0.pool.ntp.org', 'uk.pool.ntp.org']

for server in NTP_SERVERS:
    client = ntplib.NTPClient()
    response = client.request(server, version=3)
    print(f"server: {server}")
    print(f"client time of request: {datetime.fromtimestamp(response.orig_time, timezone.utc)}")
    print(f"server responded with: {datetime.fromtimestamp(response.tx_time, timezone.utc)}")

…会给我例如

^{pr2}$

注意,根据信号传输的距离,如果您查找毫秒,往返延迟(response.delay)可能很重要。在

相关问题 更多 >