2016-06-22 21 views
0

Ich versuche, Datum-/Zeitstempel zu konvertieren, die wie folgt aussehen:Konvertieren von Log-Zeitstempel Datum Zeit Offset/dst Zeit Epoche

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

zu Epochzeit. Diese kommen von einer entfernten Maschine, die sich in verschiedenen Zeitzonen befindet, also brauche ich eine Methode, die nur mit den Zeitstempeln und nicht mit der lokalen Maschinenzeit arbeitet.

Ich habe ähnliche Fragen gefunden, aber ich konnte keine eindeutige Antwort finden, wie Offsets richtig gehandhabt werden können, da die Zeitstempel aus einer anderen Zeitzone kommen als der lokale Rechner. Die Python-Dokumente bieten nicht genügend Kontext, um zu verstehen, wie man mit Zeitversatz arbeitet.

Da dieser Code muss auf einem kleinen ARM-System laufen, ich bin 2.7.9

Jede Hilfe wäre sehr geschätzt Python begrenzt.

Antwort

0

Es gibt sicherlich eine pythonic Weg, dies zu tun, aber wenn Sie dateutil vielleicht so etwas wie das funktioniert installieren:

# 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 

ingore meisten gedruckt werden, die nur über eine Liste der Formatierung von Daten in Ausgabe, aber die Idee ist re zu organisieren den Text in ein datetime Objekt, das von datetime

geparst werden kann

Hoffe das hilft!