Zeitstring parsen: Fri, 28 May 2010 13:57:23 +0200 (CEST)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Wie parst man denn sowas:

Code: Alles auswählen

time.strptime('Fri, 28 May 2010 13:57:23 +0200 (CEST)', '%a, %d %B %Y %X und_hier_fehlt_noch_was')
Das ist der Date-String wie er in (fast) jedem Email Header steckt.
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Du hast es ja schon bis time.strptime() geschafft - brauchst du jetzt Hilfe beim englisch lesen?

hth, Jörg
ps.: das Beispiel zu time.strftime() (da werden die Platzhalter aufgezählt) macht genau das Gegenstück zu dem was du machen willst...
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Beispiel von der Seite:

Code: Alles auswählen

>>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
'Thu, 28 Jun 2001 14:17:15 +0000'
sollte genau das gleiche Format sein
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Ich bekomme das nicht hin:

Code: Alles auswählen

print time.strptime('Fri, 28 May 2010 13:57:23 +0200 (CEST)', '%a, %d %B %Y %H:%M:%S +0000')
ergibt den Fehler:

Code: Alles auswählen

ValueError: time data 'Fri, 28 May 2010 13:57:23 +0200 (CEST)' does not match format '%a, %d %B %Y %H:%M:%S +0000'
problembär

So wie der String aussieht, kannst Du auch an " " splitten und dann das time- oder datetime-Objekt mit ["28", "May", "2010"] von Hand aufbauen.
Wo ist das Problem?
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Um den ganzen String am Stück zu parsen, habe ich auch nichts gefunden, aber das kann man auch von Hand machen, ist nicht so schwierig:

Code: Alles auswählen

import datetime
problem_string = 'Fri, 28 May 2010 13:57:23 +0200 (CEST)'
date_string, offset, _ = problem_string.rsplit(None, 2)
parsed_date = datetime.datetime.strptime('%a, %d %B %Y %H:%M:%S', date_string)
final_data = parsed_date - datetime.timedelta(0, int(offset[:3])*3600 + int(offset[3:])*60)
Weiß jemand wie man "datetime.tzinfo()" benutzt? - ist vielleicht einfacher

hth, Jörg
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Mit `email.utils.parsedate()` kann man es parsen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Ja, email.utils funktioniert perfekt.
Danke
Antworten