NTP timestamps in Python

thomson_matt picture thomson_matt · Nov 23, 2011 · Viewed 8k times · Source

I need to generate a timestamp in NTP format in Python. Specifically, I need to calculate the number of seconds since 1st January 1900, as a 32-bit number. (NTP timestamps are actually 64 bits, with the other 32 bits representing fractions of seconds - I'm not worried about this part).

How should I go about doing this?

Answer

Cédric Julien picture Cédric Julien · Nov 23, 2011

From the 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

and this is used like this :

ntp_time = system_to_ntp_time(time.time())