Convert timestamps with offset to datetime obj using strptime
Преобразование временных меток со смещением в datetime obj с помощью strptime
Я пытаюсь преобразовать временные метки формата "2012-07-24T23: 14:29-07:00" в объекты datetime в python с помощью метода strptime. Проблема связана со смещением по времени в конце (-07: 00). Без смещения я могу успешно выполнять
Но это выдает ошибку значения, говорящую, что "z" - неправильная директива.
Есть идеи по обходному пути?
Переведено автоматически
Ответ 1
strptime() Функция Python 2 действительно не поддерживает %z формат часовых поясов (потому что базовая time.strptime() функция его не поддерживает). У вас есть два варианта.:
Игнорируйте часовой пояс при синтаксическом анализе с помощью strptime:
Вы также можете перейти на Python 3.2 или новее, где поддержка часовых поясов была улучшена до такой степени, что %z будет работать, при условии удаления последнего : из входных данных и - перед %z:
>>> import datetime >>> time_str = "2012-07-24T23:14:29-07:00" >>> datetime.datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S%z') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 500, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 337, in _strptime (data_string, format)) ValueError: time data '2012-07-24T23:14:29-07:00' does not match format'%Y-%m-%dT%H:%M:%S%z' >>> ''.join(time_str.rsplit(':', 1)) '2012-07-24T23:14:29-0700' >>> datetime.datetime.strptime(''.join(time_str.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z') datetime.datetime(2012, 7, 24, 23, 14, 29, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))
(примечание: в моем случае я должен придерживаться python 2.7)
У меня была аналогичная проблема при анализе дат фиксации из выходных данных git log --date=iso8601 которые на самом деле не являются форматом ISO8601 (отсюда добавление --date=iso8601-strict в более поздней версии).
Поскольку я использую django, я могу использовать имеющиеся там утилиты.