2016-06-22 1 views
0

Я пытаюсь преобразовать штемпеля даты/времени, которые выглядят следующим образом:Преобразование журнала Метка времени Дата Смещение времени/DST к эпохе Время

20160131 | 235501 [-0700/0] 20160621 | 225549 [-0600/1]

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

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

Поскольку этот код должен работать на небольшой системы ARM, я ограничен Python 2.7.9

Любая помощь будет высоко ценится.

ответ

0

Там же, несомненно, более вещий способ сделать это, но если вы можете установить dateutil, может быть что-то вроде это работает:

# epoch_date.py  
import datetime 
from dateutil.parser import parse 
import re 

raw_dts = '20160131|235501[-0700/0] 20160621|225549[-0600/1]' 
dts = raw_dts.split(' ') 
print '{:27s} {:5}'.format('date/time stamp', 'epoch') 
for dt in dts: 
    dt_fmt = re.compile(r'[^\d-]+') 
    time_str = dt_fmt.sub('', dt) 
    time_date = ''.join(time_str[:-1]) 
    date_obj = parse(time_date) 
    tz = date_obj.tzinfo 
    epoch_fmt = (date_obj - datetime.datetime(1970,1,1,tzinfo=tz)).total_seconds() 
    print '{:28s}{:7.1f}'.format(dt, epoch_fmt) 

напечатает

$ python epoch_date.py 
date/time stamp    epoch 
20160131|235501[-0700/0] 1454284501.0 
20160621|225549[-0600/1] 1466549749.0 

Игнорировать регистр больше всего, что только форматирование по списку дат в выводе, но идея использует re для организации текста в объекте datetime, который может быть проанализирован datetime

Надеюсь, что это поможет!

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