Python中的NTP时间戳

3

我需要在Python中生成NTP格式的时间戳。具体来说,我需要计算自1900年1月1日以来的秒数,作为32位数字。(实际上,NTP时间戳是64位的,另外32位表示秒的小数部分-但这部分不是我的问题)。

我该如何做呢?

4个回答

3

来自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())

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

请注意,在Python3中,timedelta.total_seconds()不可用。

(备注:保留html标记)

3
请注意 - timedelta.total_seconds() 在 Python 2.7 和 Python >= 3.2 中都可用,只是早期的 2.x、3.0 和 3.1 版本缺少该函数。 - Eli Collins

2

1
from datetime import datetime

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

这将返回一个float,您可以以明显的方式截断它。一定要加入一个检查,确保结果是<= 2**32-1,因为您的程序肯定会在2036年之前崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接