2012-11-06 11 views
9

Prawdopodobnie jest to bardzo proste pytanie, ale po przeczytaniu dokumentacji wciąż nie mogę dowiedzieć się, jak to zrobić ...Konwertuj łańcuchy "nieznanego formatu" na obiekty typu datetime?

Mam dwa ciągi w Pythonie, które zawierają termin nieznanym formacie. Nie wiem, jakie to są formaty, ale wiem, że oba są poprawnymi wyrażeniami daty i czasu. Na przykład jeden z nich może być w formacie ISO, a drugi w innym formacie.

Wszystko, czego potrzebuję, to móc porównać daty. Jaki jest prawidłowy sposób przekształcenia ciągów znaków w odpowiednie obiekty daty i godziny, aby można je było porównać?

dziękuję!

+2

zaktualizowałem tytuł; problemem nie jest "porównywanie ciągów datetime", to "konwersja łańcuchów na porównywalną wartość". –

Odpowiedz

16

Urządzenie dateutil module ma analizator dat, który może analizować łańcuchy daty w wielu formatach.

Na przykład

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) 

pamiętać, że niektóre ciągi datetime może być niejednoznaczna: 10-09-2003 może oznaczać 9 października lub 10 września na przykład. dateutil ma parametry jak dayfirst i yearfirst obsłużyć to:

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) 
Powiązane problemy