Разбор даты и времени в Python ..? - PullRequest
42 голосов
/ 01 марта 2012

У меня есть система (разработанная на Python), которая принимает datetime в виде строки в РАЗЛИЧНЫХ форматах , и мне нужно синтаксический анализ их .. В настоящее время форматы строки даты-времени:

Fri Sep 25 18:09:49 -0500 2009

2008-06-29T00:42:18.000Z

2011-07-16T21:46:39Z

1294989360

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

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

Ответы [ 2 ]

57 голосов
/ 01 марта 2012

Как и предположил @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
15 голосов
/ 01 марта 2012

Вам следует заглянуть в пакет dateutil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...