我需要在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版本。 –