2011-11-23 167 views
3

我需要在Python中以NTP格式生成時間戳。具體來說,我需要計算自1900年1月1日以來的秒數,作爲一個32位數字。 (NTP時間戳實際上是64位,其他32位表示幾分之一秒 - 我不擔心這部分)。Python中的NTP時間戳

我應該怎麼做呢?

回答

3
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提供)

+2

只是要注意的 - ' timedelta.total_seconds()'在Python 2.7和Python> = 3.2下可用,它只是早期的缺少它的2.x,3.0和3.1版本。 –

2

從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()) 
1
from datetime import datetime 

(datetime.utcnow() - datetime(1900, 1, 1)).total_seconds() 

返回一個float,您可以用明顯的方式截斷它。一定要放在一個檢查的結果是<= 2**32-1,因爲你的計劃勢必會在2036年