【发布时间】:2012-06-03 04:23:27
【问题描述】:
我有一个这种格式的日期时间。
1999-12-31 09:00:00
来自十六进制值:
F0C46C38
如何将上述格式的日期时间值变成一个 4 字节的十六进制? 我在上面发布的值是相互补充的。第二个代码块中的十六进制取反了。
谢谢!
【问题讨论】:
我有一个这种格式的日期时间。
1999-12-31 09:00:00
来自十六进制值:
F0C46C38
如何将上述格式的日期时间值变成一个 4 字节的十六进制? 我在上面发布的值是相互补充的。第二个代码块中的十六进制取反了。
谢谢!
【问题讨论】:
386CC4F0(十六进制)== 946652400(十进制)
946652400 是 1999-12-31 15:00:00 GMT 的 Unix 时间戳。
import time
print hex(int(time.mktime(time.strptime('1999-12-31 15:00:00', '%Y-%m-%d %H:%M:%S'))) - time.timezone)
【讨论】:
time.timezone 不应在此处使用。如果输入时间为 UTC,则应使用 calendar.timegm() 而不是 time.mktime()。
#!/usr/bin/env python3
import binascii
import struct
from datetime import datetime
# convert time string into datetime object
dt = datetime.strptime('1999-12-31 09:00:00', '%Y-%m-%d %H:%M:%S')
# get seconds since Epoch
timestamp = dt.timestamp() # assume dt is a local time
# print the timestamp as 4 byte hex (little-endian order)
print(binascii.hexlify(struct.pack('<I', round(timestamp))))
# -> b'f0c46c38'
【讨论】: