У меня есть данные от человека в формате YYYY-MM-DD HH:MM:SS
, который, как я знаю, должен быть местным временем в Лос-Анджелесе. В Python, как мне преобразовать это в объект datetime.datetime
, который однозначен и правилен? Я знаю, что ввод является неоднозначным во время осеннего перехода из ДСТ; Я в порядке с любым выбором, который случается в течение этого часа, пока он детерминирован.Python: как правильно преобразовать из даты строки в определенный часовой пояс?
Вот моя попытка, что я с удивлением обнаружил, не работает:
>>> import pytz
>>> from dateutil import parser as date_parser
>>> PACIFIC = pytz.timezone('US/Pacific')
>>> result = date_parser.parse('2016-08-01 00:00:00 FOO', tzinfos={'FOO': PACIFIC})
>>> result.utcoffset()
datetime.timedelta(-1, 57600)
>>> str(result)
'2016-08-01 00:00:00-08:00'
Несмотря на то, попросил US/Pacific
и это является датой летом, я получаю UTC-8 вместо UTC-7 ,
Проблема здесь в том, что 'pytz' часовых поясов не может быть легко крепится таким образом. Вы должны использовать 'PACIFIC.localize()' на возвращаемом объекте 'datetime.datetime'. Не беспокойтесь о 'tzinfos', если вы используете один известный часовой пояс для всех дат. – Paul
О, также, если вы знаете формат даты и часовой пояс, не используйте 'dateutil.parser', он неэффективен и не применяет формат (так что ошибки в формате могут все же давать дату, но неверный). Используйте 'datetime.strptime' – Paul
Спасибо @Paul; не возражаете ли вы превратить это в обработанный пример в качестве ответа? – jacobsa