Временные метки NTP в Python - PullRequest
3 голосов
/ 23 ноября 2011

Мне нужно сгенерировать метку времени в формате NTP в Python. В частности, мне нужно рассчитать количество секунд с 1 января 1900 года как 32-разрядное число. (Временные метки NTP на самом деле 64-битные, остальные 32 бита представляют доли секунд - я не беспокоюсь об этой части).

Как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 23 ноября 2011
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 голосов
/ 23 ноября 2011

Из питона 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 голос
/ 23 ноября 2011
from datetime import datetime

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

Возвращает float, которое вы можете обрезать очевидным образом.Обязательно проверьте, что результат равен <= 2**32-1, поскольку ваша программа обречена на неудачу в 2036 году.

1 голос
/ 23 ноября 2011

Вы должны взглянуть на ntplib, который доступен через PyPi:

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

...