2011-02-03 2 views
2

Мне нужно преобразовать метку времени даты, которая состоит из шести шестнадцатеричных октетов с использованием python и, похоже, не может найти простой способ сделать это. Я разбираю несколько записей из некоторых антивирусных журналов и должен скрывать значение времени даты, чтобы оно выглядело как обычная дата.конвертировать datetime штамп шести шестнадцатеричных октетов с использованием python

Например: 200A13080122 следует перевести в положение «19 ноября 2002 года, 8:01:34 AM»

Это формат, я должен работать с:

Отметка состоит из шести шестнадцатеричных октетов. Они представляют собой следующее: Первого октета: Количество лет с 1970 Второго октета: Месяц, где январь = 0 Третьего октет: День Четвертый октет: Час Пятый октет: Минута Шестой октет: Второй Например, 200A13080122 представляет 19 ноября 2002 года, 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) 
+0

Отличный ответ, просто добавьте нулевое дополнение к часам, минутам и секундам. –

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

Так вы говорите, что нужно преобразовать в «то, что выглядит как обычная дата», я беру на себя смелость показывая его таким образом ...

+0

Ahh, никто не заметил, что моя функция h (i) приветствует нового пользователя и приглашает его «вернуться» в другое «datetime» ... – Benjamin

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

у вас есть две переменные, называемые «m». –

+0

Я тоже это заметил. Интересно, почему я беру февраль вместо ноября. Duh. –

+0

Спасибо за все ваши ответы –

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 

Там может быть лучше, чтобы получить каждый октет.

Смежные вопросы