更新された回答については、以下の編集を参照してください
。NTP 時間の場合、64 ビットは秒と秒の端数に分割されます。上位 32 ビットは秒です。下位 32 ビットは秒の端数です。分数部分を 2^32 で割ると分数が得られます。
ステップ 1 では、double に変換します。
十分に簡単な python が好きなら、私は境界チェックを追加しませんでした:
def to_seconds(h):
return (h>>32) + ((float)(h&0xffffffff))/pow(2,32)
>>> to_seconds(129518309081725000)
30155831.26845886
time モジュールは、その float を読み取り可能な時間形式に変換できます。
import time
time.ctime(to_seconds(ntp_timestamp))
ただし、タイムスタンプの発信元について心配する必要があります。time.ctime は 1970 年 1 月 1 日を基準としています。したがって、プログラムが実行されてからの ntp 形式の時間に基づいている場合は、ctime のタイムスタンプを正規化するために秒数を追加する必要があります。
>>> time.ctime(to_seconds(129518309081725000))
'Tue Dec 15 17:37:11 1970'
編集: PyGuy は正しいです。元のタイムスタンプは ntp 時刻番号ではなく、Windows 64 ビットのタイムスタンプです。
1/1/1601 に基づく 100ns 間隔を 1970 秒間隔に変換する新しい to_seconds メソッドを次に示します。
def to_seconds(h):
s=float(h)/1e7 # convert to seconds
return s-11644473600 # number of seconds from 1601 to 1970
そして新しい出力:
import time
time.ctime(to_seconds(129518309081725000))
'Mon Jun 6 04:48:28 2011'