我需要在Python中以NTP格式生成时间戳。具体来说,我需要计算自1900年1月1日以来的秒数,作为一个32位数字。 (NTP时间戳实际上是64位,其他32位表示几分之一秒 - 我不担心这部分)。Python中的NTP时间戳
我应该怎么做呢?
我需要在Python中以NTP格式生成时间戳。具体来说,我需要计算自1900年1月1日以来的秒数,作为一个32位数字。 (NTP时间戳实际上是64位,其他32位表示几分之一秒 - 我不担心这部分)。Python中的NTP时间戳
我应该怎么做呢?
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
打破(注意:timedelta.total_seconds()
不python3提供)
你应该看看ntplib
,它通过PyPI将可用:
从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())
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版本。 –