我需要在Python中生成NTP格式的时间戳。具体来说,我需要计算自1900年1月1日以来的秒数,作为32位数字。(实际上,NTP时间戳是64位的,另外32位表示秒的小数部分-但这部分不是我的问题)。
我该如何做呢?
来自Python的ntplib:
SYSTEM_EPOCH = datetime.date(*time.gmtime(0)[0:3])
NTP_EPOCH = datetime.date(1900, 1, 1)
NTP_DELTA = (SYSTEM_EPOCH - NTP_EPOCH).days * 24 * 3600
def ntp_to_system_time(date):
"""convert a NTP time to system time"""
return date - NTP_DELTA
def system_to_ntp_time(date):
"""convert a system time to a NTP time"""
return date + NTP_DELTA
这是用法:
ntp_time = system_to_ntp_time(time.time())
import datetime
diff = datetime.datetime.utcnow() - datetime.datetime(1900, 1, 1, 0, 0, 0)
timestamp = diff.days*24*60*60+diff.seconds
timestamp
# returns
# 3531049334
请注意,在Python3中,timedelta.total_seconds()
不可用。
from datetime import datetime
(datetime.utcnow() - datetime(1900, 1, 1)).total_seconds()
这将返回一个float
,您可以以明显的方式截断它。一定要加入一个检查,确保结果是<= 2**32-1
,因为您的程序肯定会在2036年之前崩溃。
timedelta.total_seconds()
在 Python 2.7 和 Python >= 3.2 中都可用,只是早期的 2.x、3.0 和 3.1 版本缺少该函数。 - Eli Collins