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

ntplibPyPiから入手できるを見てください。

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 に答える