3

我需要在 Python 中生成 NTP 格式的时间戳。具体来说,我需要计算自 1900 年 1 月 1 日以来的秒数,作为 32 位数字。(NTP 时间戳实际上是 64 位,其他 32 位代表几分之一秒 - 我不担心这部分)。

我该怎么做呢?

4

4 回答 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())
于 2011-11-23T14:57:52.480 回答
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 中不可用)

于 2011-11-23T15:04:24.890 回答
2

你应该看一下ntplib,它可以通过 PyPi 获得:

http://pypi.python.org/pypi/ntplib/

于 2011-11-23T14:57:01.777 回答
1
from datetime import datetime

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

这会返回一个float你可以以明显的方式截断的。请务必检查结果是否为<= 2**32-1,因为您的程序一定会在 2036 年中断。

于 2011-11-23T14:58:32.400 回答