我需要使用python转换由六个十六进制八位字节组成的日期时间戳,但似乎无法找到一种简单的方法。我正在从一些防病毒日志中解析许多条目,并且需要将日期时间值转换为看起来像常规日期的东西。
例如:200A13080122应翻译为“2002年11月19日上午8:01:34”
这是我必须使用的格式:
时间戳由六个十六进制八位字节组成。它们代表以下内容: 第一个八位字节:自1970年以来的年数 第二个八位字节:月,其中一月= 0 第三个八位字节:第二天 第四个八位字节:小时 第五个八位位组:分钟 第六个八位字节:第二个 例如,200A13080122代表2002年11月19日上午8:01:34。
感谢任何帮助,
答案 0 :(得分:2)
import binascii, calendar
Y,M,D,h,m,s = map(ord, binascii.a2b_hex("200A13080122"))
ampm = "AM"
if h >= 12:
h = h-12
ampm = "PM"
if h == 0:
h = 12
print "%s %d, %d, %d:%d:%d %s" % (calendar.month_name[M+1], D, 1970+Y,
h, m, s, ampm)
答案 1 :(得分:0)
import datetime
def h(i):
return int(i,16)
s = '200A13080122'
date = datetime.datetime(h(s[0:2]) + 1970, h(s[2:4]) + 1, h(s[4:6]), h(s[6:8]), h(s[8:10]), h(s[10:12]))
既然你说你需要转换成“看起来像常规日期的东西”,我可以自由地以这种方式显示它......
答案 2 :(得分:0)
import datetime
dt = "200A13080122"
y, M, d, h, m, s = (int(o[0]+o[1], 16) for o in zip(dt[::2],dt[1::2]))
date = datetime.datetime(y+1970, M+1, d, h, m, s)
print date.strftime("%B %d, %Y, %I:%M:%S %p")
答案 3 :(得分:0)
import time
ts = 0x200A13080122
struct_time = ((ts >> 40) + 1970, (ts >> 32 & 0xFF) + 1, ts >> 24 & 0xFF, ts >> 16 & 0xFF, ts >> 8 & 0xFF, ts & 0xFF, 0, 0, 0)
print time.strftime("%B %d, %Y, %I:%M:%S %p", struct_time)
# November 19, 2002, 08:01:34 AM
可能有更好的方法来获取每个八位字节。