Python中的NTP时间戳

3 投票
4 回答
10323 浏览
提问于 2025-04-17 06:55

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

我该怎么做呢?

4 个回答

2

你可以看看 ntplib 这个库,它可以通过 PyPi 获取:

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

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

(注意,timedelta.total_seconds() 在 Python 3 中不可用)

撰写回答