У меня есть следующая строка "2017-03-30 08:25:00CET"
, которую я хочу преобразовать в объект dtetime tz-aware.datetime: преобразование из строки с именем часового пояса не работает
Согласно this SO question, из python 3.2 это можно сделать, используя только datetime
модуль. Кроме того, из documentation, я вижу
%z | UTC offset in the form +HHMM or -HHMM (empty string if the object is naive). | (empty), +0000, -0400, +1030 %Z | Time zone name (empty string if the object is naive). | (empty), UTC, EST, CST
Так что попробуйте следующее
datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%Z')
Я не получаю сообщение об ошибке, но тогда объект я не TZ-Aware
datetime.datetime(2017, 3, 30, 8, 25)
С другой стороны, если я преобразую свою строку в "2017-03-30 08:25:00+0200"
, а затем преобразую ее в объект с
datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%z')
Я получаю TZ-Aware DateTime:
datetime.datetime(2017, 3, 30, 8, 25, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))
Любые идеи о том, почему он работает с %z
, но не с %Z
? Что я делаю не так?
Соответствующие для вас: http://stackoverflow.com/questions/1703546/parsing-date-time-string-with-timezone -abbreviated-name-in-python http://stackoverflow.com/questions/3305413/python-strptime-and-timezones. Названия часовых поясов (например, 'cet') неоднозначны. Ваш второй пример работает, потому что вы специально даете смещение часовой пояс '+ 0200'. используйте синтаксический анализатор в течение даты или вручную укажите часовой пояс с помощью tzinfo(). – Chuck
Использование Python 3.6, я получаю данные «ValueError: time» 2017-03-30 08: 25: 00CET «не соответствует формату»% Y-% m-% d% H:% M:% S% Z'' от выполнения 'datetime.strptime (« 2017-03-30 08: 25: 00CET »,«% Y-% m-% d% H:% M:% S% Z ') ', что отличается от того, что вы говорите. – martineau
@CharlesMorris, спасибо за ссылки. Я нашел 2-й особенно интересный. Для меня не имеет смысла, что в документации дается возможность использовать имена часовых поясов, но тогда это не работает, потому что это неоднозначно. – J0ANMM