请参阅下面的编辑以获取更新的答案:
对于 NTP 时间,64 位分为几秒和几分之一秒。前 32 位是秒。底部 32 位是秒的分数。您可以通过将小数部分除以 2^32 来获得小数。
所以第一步,转换成双倍。
如果你喜欢很简单的 python,我没有添加任何边界检查:
def to_seconds(h):
return (h>>32) + ((float)(h&0xffffffff))/pow(2,32)
>>> to_seconds(129518309081725000)
30155831.26845886
时间模块可以将该浮点数转换为可读的时间格式。
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 位时间戳。
这是新的 to_seconds 方法,用于将基于 1/1/1601 的 100ns 间隔转换为 1970 秒间隔:
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'