使用python转换六个十六进制八位字节的日期时间戳

时间:2011-02-03 18:09:12

标签: python

我需要使用python转换由六个十六进制八位字节组成的日期时间戳,但似乎无法找到一种简单的方法。我正在从一些防病毒日志中解析许多条目,并且需要将日期时间值转换为看起来像常规日期的东西。

例如:200A13080122应翻译为“2002年11月19日上午8:01:34”

这是我必须使用的格式:

时间戳由六个十六进制八位字节组成。它们代表以下内容: 第一个八位字节:自1970年以来的年数 第二个八位字节:月,其中一月= 0 第三个八位字节:第二天 第四个八位字节:小时 第五个八位位组:分钟 第六个八位字节:第二个 例如,200A13080122代表2002年11月19日上午8:01:34。

感谢任何帮助,

4 个答案:

答案 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

可能有更好的方法来获取每个八位字节。