2012-11-06 7 views
9

Dies ist wahrscheinlich eine sehr einfache Frage, aber nach dem Lesen der Dokumentation kann ich immer noch nicht herausfinden, wie es zu tun ...Konvertieren von Strings "unbekanntes Format" in Datetime-Objekte?

Ich habe zwei Strings in Python, die Daten eines unbekannten Format enthalten. Ich weiß nicht, in welchen Formaten sie sind, außer dass ich weiß, dass beide gültige Datum-Zeit-Ausdrücke sind. Zum Beispiel könnte einer von ihnen im ISO-Format und der andere in einem anderen Format sein.

Alles, was ich brauche, ist in der Lage zu sein, die Daten zu vergleichen. Was ist der richtige Weg, Strings in geeignete Datum-Zeit-Objekte zu verwandeln, damit sie verglichen werden können?

danke!

+2

ich den Titel aktualisiert; Das Problem besteht nicht darin, "datetime strings" zu vergleichen, sondern die Strings in einen vergleichbaren Wert zu konvertieren. –

Antwort

16

Die dateutil module verfügt über einen Datumsparser, der Datumszeichenfolgen in vielen Formaten analysieren kann.

Zum Beispiel

In [13]: import dateutil.parser as parser 

In [14]: parser.parse("19970902T090000") 
Out[14]: datetime.datetime(1997, 9, 2, 9, 0) 

In [15]: import datetime as dt 

In [16]: now = dt.datetime.now() 

In [17]: now.isoformat() 
Out[18]: '2012-11-06T15:08:51.393631' 

In [19]: parser.parse('2012-11-06T15:08:51.393631') 
Out[19]: datetime.datetime(2012, 11, 6, 15, 8, 51, 393631) 

In [20]: parser.parse('November 6, 2012') 
Out[20]: datetime.datetime(2012, 11, 6, 0, 0) 

Beachten Sie, dass einige Datetime Strings mehrdeutig sein können: 10-09-2003 9. Oktober oder 10. September, zum Beispiel bedeuten könnte. dateutil hat Parameter wie dayfirst und yearfirst zu handhaben:

In [21]: parser.parse("10-09-2003") 
Out[21]: datetime.datetime(2003, 10, 9, 0, 0) 

In [22]: parser.parse("10-09-2003", dayfirst = True) 
Out[22]: datetime.datetime(2003, 9, 10, 0, 0) 

In [23]: parser.parse("10-09-03", yearfirst = True) 
Out[23]: datetime.datetime(2010, 9, 3, 0, 0) 
Verwandte Themen