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

使用python转换六个十六进制八位字节的日期时间戳,python,Python,我需要使用python转换一个由六个十六进制八位字节组成的日期时间戳,但似乎找不到一种简单的方法。我正在解析一些防病毒日志中的一些条目,需要将日期时间值转换为看起来像常规日期的值 例如:200A13080122应该翻译成“2002年11月19日上午8:01:34” 这是我必须使用的格式: 时间戳由六个十六进制八位字节组成。它们代表如下: 第一个八隅体:自1970年以来的年数 第二个八位字节:月份,其中一月=0 第三个八重奏:天 第四八节:小时 第五八节:分钟 第六个八位组:第二个 例如,200A

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

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

这是我必须使用的格式:

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

谢谢你的帮助

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)
既然你说你需要转换成“看起来像常规约会的东西”,我冒昧地用这种方式展示它

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")

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

答案很好,只需将零填充添加到小时、分钟和秒中。有两个变量叫做“m”。我也注意到了这一点。我想知道为什么我要用二月而不是十一月。谢谢你的回答谢谢大家的回答没有人注意到我的h(i)功能欢迎新用户并邀请他在另一个“约会时间”返回。。。
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")
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