Parsen von Datums-und Zeitstempeln, die in Python mit der Zeit.format-strptime
Mein cloud-server-logs mal in diesem format:
[17/Dec/2011:09:48:49 -0600]
Lesen es in Python Variablen, kann ich sagen:
>>>str = '17/Dec/2011:09:48:49 -0600'
>>>import time
>>>print time.strptime(str,"%d/%b/%Y:%H:%M:%S -0600")
Ergebnis:
time.struct_time(tm_year=2011, tm-mon=12, tm=mday=17, tm_hour=9, tm_min=48, tm_sec=49, tm_wday=5, tm_yday=351, tm_isdst=-1)
oder ich kann versuchen
>>>mytime = time.strptime(str,"%d/%b/%Y:%H:%M:%S -0600")
>>>print mytime.tm_hour
Ergebnis:
9
Was bedeutet die -0600
tun? Ich erwartet, dass es um die Stunde der Wert in der date-time-Objekt? Gibt es einen Platzhalter zu verwenden, anstatt hard-coding der -0600
?
InformationsquelleAutor TGanoe | 2012-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
-0600
ist der offset von GMT (Greenwich Mean Time). Als eine andere Frage schon sagt, Zeit.strptime nicht Lesen kann, Zeitzone offsets, obwohldatetime.strftime
Sie erstellen können.Da erklärte zu Beginn der die
datetime
- Modul in der Dokumentation, gibt es zwei Wege der Annäherung an "die Zeit" in python, naiv oder bewusst. Wenn alles, was Sie über Pflege ist Zeit in Ihrem system, die sich mit naiv-time/datetime-Objekte ist in Ordnung (in dem Fall können Sie die Streifen aus dem offset-als alan vorgeschlagen). Wenn Sie brauchen, um zu vergleichen Sie die Werte in Ihrem system mit der realen Welt die Vorstellung von Zeit, müssen Sie beginnen, sich mit diesem offset.Den einfach Umgang mit dies ist nur zu verwenden Sie
python-dateutil
. Es hat eine der parse-Funktion , wird sein bestes tun, sah alles verschwommen entsprechen den Datums-string, den Sie übergeben, die in mehreren Formaten und zurück, eine praktikable datetime-Instanz, die Sie repräsentiert seine besten erraten, was Sie meinte.Normalerweise mit software geben, seine "best guess" ist eine Schlechte Sache. In diesem Fall scheint es gerechtfertigt, wenn sich Ihre input-Formate sind stabil. Der Umgang mit Zeit in der software-Entwicklung ist schwer, gehen Sie einfach shopping.
InformationsquelleAutor Don Spaulding
Es ist das offset von GMT. Wenn Sie es nicht möchten, einfach entfernen Sie es aus:
es arbeitet mit regulären Ausdrücken zu: newdate = re.split(" ", myStr)[0]
InformationsquelleAutor alan
strptime
passt dann auch die Modifikatoren (%d
,%b
, ...) mit den entsprechenden Abschnitten der Zeichenkette und wandelt dann, dass abgestimmt piece von string in einen integer. Also in deinem Fall, die-0600
macht es nur so, dass Ihr format-string entspricht der Eingabe-string.Wenn Sie wollen, um die Zeit einzustellen, die von einem angegebenen offset, ich würde empfehlen, mit einem
datetime
Objekt.Beachten Sie auch, dass seit
str
ist ein builtin, ist es grundsätzlich nicht ratsam zu zuweisen.InformationsquelleAutor mgilson