繁体   English   中英

将 NTP 时间戳转换为 Unix 时间

[英]Convert NTP timestamp to Unix time

我从 NTP 服务器获取当前时间。 NTP 的参考纪元是 1900 年 1 月 1 日的 0:00:00.000,我用于 NTP 的库返回自该参考纪元以来经过的秒数。 如您所见,它的工作方式与 Unix 时间类似,只是它使用不同的参考纪元。 因此,我的目标是将这个 NTP 时间戳转换为 unix 时间戳,同时避免所有那些奇怪的事情,比如闰年、闰秒以及人类对他们的时间尺度所做的所有其他奇怪的事情。

天真的方法显然是计算 NTP 参考纪元和 Unix 参考纪元之间发生的秒数,将其存储为常数并从 NTP 时间戳中减去,但我觉得我太愚蠢了忘记上面提到的一些奇怪的东西。 因此,我的问题是 Python 是否有一些内置的 function 或者是否有一个库可以做到这一点。

ntplib python 库将 NTP 时间戳与 Unix 时间转换为自 1970 年 1 月 1 日以来的秒数。

import ntplib
from datetime import datetime, timezone

dt = datetime.now(timezone.utc)
ts = dt.timestamp()
print("datetime:", dt)
print("timestamp:", ts)

# convert native timestamp to NTP time
ntptime = ntplib.system_to_ntp_time(ts)
print("NTP time: ", ntptime)

# convert NTP time to native timestamp
ts = ntplib.ntp_to_system_time(ntptime)
print("timestamp:", ts)

Output:

datetime: 2022-02-01 18:22:56.530085+00:00
timestamp: 1643739776.530085
NTP time:  3852728576.530085

该库还实现了一个 NTP 客户端来查询 NTP 服务器并从请求及其响应中返回相关的时间。

import ntplib
from datetime import datetime

client = ntplib.NTPClient()
server = 'pool.ntp.org'

resp = client.request(server, version=3)

print("offset", resp.offset)
print("delay", resp.delay)

# timestamps are converted to native "UNIX" timestamps
print(resp.orig_time)

print("orig_time:", datetime.utcfromtimestamp(resp.orig_time))
print("recv_time:", datetime.utcfromtimestamp(resp.recv_time))
print("tx_time  :", datetime.utcfromtimestamp(resp.tx_time))
print("dest_time:", datetime.utcfromtimestamp(resp.dest_time))

Output:

offset 0.007886648178100586
delay 0.002925395965576172
1643738937.685132
orig_time: 2022-02-01 18:08:57.685132
recv_time: 2022-02-01 18:08:57.693858
tx_time  : 2022-02-01 18:08:57.693956
dest_time: 2022-02-01 18:08:57.688134

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM