2012-03-01 4 views
37

У меня есть система (разработанная в Python), который принимает DateTime в виде строки в различных форматах и я должен разбор them..Currently DateTime строковых форматов:Разбор данных в Python ..?

Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

Теперь я хочу родовой синтаксический анализатор, который может конвертировать любой из этих форматов datetime в соответствующий объект datetime ...

В противном случае мне нужно разобрать их отдельно. Поэтому, пожалуйста, также предоставляйте метод для их разбора отдельно (если нет общего парсера). !!

ответ

52

Как предложено @TimPietzcker пакет dateutil это путь, он обрабатывает первые 3 формата правильно и автоматически:

>>> 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 формат, кажется, захолустный вверх, но, к счастью, стандарт datetime.datetime это для задачи:

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

это довольно легко сделать функцию из этого, который обрабатывает все 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

На самом деле это то, что я уже сделал, когда @TimPietzcker предложил ... вы можете видеть это в комментарии .. !! .. но спасибо за удивительный ответ (и описание кода) .. !! –

+0

Чтобы установить dateutil: 'pip install python-dateutil'. Это похоже на то, что они хотят, чтобы вы подумали, что это не законный пакет, когда они не предлагают, как установить его через 'pip'. – ArtOfWarfare

14

Вы должны изучить пакет dateutil.

+6

особенно 'dateutil.parser.parse()' – Kimvais

+0

thanx для ответа .. !! .. но одна вещь .. «dateutil.parser.parse» синтаксический анализ первых 3 форматов даты ... но он не может разобрать последний формат даты (который является длинным значением). Он показывает «год вне диапазона» Исключение ... Но встроенный модуль python datetime способен анализировать это длинное значение ... почему это так .. ?? –

Смежные вопросы