2011-11-23 58 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年