Преобразование нечетной метки времени со смещением в UNIX time в Python [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть строка метки времени из веб-журнала, которая выглядит следующим образом:

10 / Jun/2005:05:59:05 -0500

Он хотел бы преобразовать его в метку времени UNIX.

A datetime можно преобразовать с помощью time.mktime(datetime.timetuple())

В соответствии с datetime документы, datetime.strptime() следует преобразовать его в datetime:

from datetime import datetime
datetime.strptime("10/Jun/2005:05:59:05 -0500","%d/%b/%Y:%H:%M:%S %z")

По крайней мере, на Python 2.7.2 на моем Mac это приводит к

ValueError: 'z' - плохая директива в формате '%d/%b / %Y:%H:%M:%S %z '

Прочитав много вопросов на SO об этой ошибке, я решил попробовать python-dateutil:

from dateutil import parser
parser.parse("10/Jun/2005:05:59:05 -0500")

Это тоже не сработало:

ValueError: неизвестный формат строки

Что теперь?

1 2

1 ответ:

Вы можете использовать dateutils чтобы провести беседу, вам потребуется два шага:

>>> import calendar
>>> from dateutil.parser import parse
>>> d = parse('10/Jun/2005:05:59:05 -0500', fuzzy=True)

Это создаст объект datetime

>>> d
datetime.datetime(2005, 6, 10, 5, 59, 5, tzinfo=tzoffset(None, -18000))

И преобразовать его в метку времени UNIX:

>>> ts = calendar.timegm(d.utctimetuple())
>>> print ts
1118401145