在 Python 中将 NTP 时间戳转换为日期时间

Converting NTP timestamp to datetime in Python

在Python中,我有一个代表NTP时间的64位浮点数。我喜欢将其转换为可读格式,例如日期时间对象。

根据维基百科,前 32 位包含自 1970 年以来的时间,后 32 位是几分之一秒,我对此不感兴趣。但是,由于我有一个浮点数,而不是一个整数,怎么能我只访问前 32 位? Bitshift 不起作用...

ntplib python 模块具有将日期时间戳转换为 NTP 时间戳并返回的功能。

import ntplib
from datetime import datetime, timezone

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

# convert datetime to NTP time
ntptime = ntplib.system_to_ntp_time(dt)
print("NTP time: ", ntptime)

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

# convert system timestamp to datetime
print("datetime:", datetime.fromtimestamp(ts))

# convert 1-Jan-1970 epoch datetime to NTP time
ntptime = ntplib.system_to_ntp_time(0)
print("\nNTP time: ", ntptime)
ts = ntplib.ntp_to_system_time(ntptime)
print("datetime:", datetime.fromtimestamp(ts, tz=timezone.utc))

输出:

timestamp: 1631063844.829307
NTP time:  3840052644.829307
timestamp: 1631063844.829307
datetime:  2021-09-08 01:17:24.829307+00:00

NTP time:  2208988800
datetime: 1970-01-01 00:00:00+00:00