2012-03-01 17 views
37

Mam system (opracowany w Pythonie), który akceptuje datetime jako ciąg w formatach RÓŻNYCH i muszę parse them..Currently datetime formatów smyczkowych są:Parsowanie datetime w Python ..?

Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

Teraz ja chcą generic analizator składni, który może przekonwertować dowolny z tych formatów datetime w odpowiednim obiekcie datetime ...

W przeciwnym razie muszę przejść z analizowaniem ich indywidualnie. Więc proszę również podać metodę ich indywidualnego analizowania (jeśli nie ma generycznego analizatora składni) .. !!

Odpowiedz

52

Jak sugeruje @TimPietzcker pakiet dateutil jest droga, to zajmuje pierwsze 3 formaty poprawnie i automatycznie:

>>> from dateutil.parser import parse 
>>> parse("Fri Sep 25 18:09:49 -0500 2009") 
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000)) 
>>> parse("2008-06-29T00:42:18.000Z") 
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc()) 
>>> parse("2011-07-16T21:46:39Z") 
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc()) 

unixtime Format wydaje Hicka się, ale na szczęście średnia datetime.datetime jest gotowy do zadania:

>>> from datetime import datetime 
>>> datetime.utcfromtimestamp(float("1294989360")) 
datetime.datetime(2011, 1, 14, 7, 16) 

jest to raczej łatwe do wykonania funkcji z tego, że obsługuje wszystkie formaty 4:

from dateutil.parser import parse 
from datetime import datetime 

def parse_time(s): 
    try: 
     ret = parse(s) 
    except ValueError: 
     ret = datetime.utcfromtimestamp(s) 
    return ret 
+0

Tak naprawdę to już zrobiłem, kiedy @TimPietzcker zasugerował ... możesz to zobaczyć w komentarzu .. !! .. ale w zamian za wspaniałą odpowiedź (i opis kodu) .. !! –

+0

Aby zainstalować dateutil: 'pip install python-dateutil'. Wygląda na to, że chcą, abyś myślał, że to nie jest pakiet legit, kiedy nie oferują sposobu instalacji za pomocą 'pip'. – ArtOfWarfare

14

Powinieneś zajrzeć do pakietu dateutil.

+6

szczególnie 'dateutil.parser.parse()' – Kimvais

+0

thanx za odpowiedź .. !! .. ale jedna rzecz ... "dateutil.parser.parse" parsuje pierwsze 3 formaty daty .. ale nie jest w stanie przeanalizować ostatni format daty (który jest długą wartością) .. Pokazuje "rok poza zakresem" Wyjątek ... Ale wbudowany moduł datetime Pythona jest w stanie przetworzyć tę długą wartość .. dlaczego tak jest ... ?? –

Powiązane problemy