С этим я боюсь уже несколько часов. Код намного больше, чем пример, который я предоставляю здесь, но он сводится к следующему:Неправильный часовой пояс? 30мин вместо 1 часа
У меня есть объект datetime, который наивен, и я хочу преобразовать его в UTC, но это не работает. ожидается.
import datetime
import pytz
# Following is a naive datetime object, but we know the user meant
# timezone Europe/Zurich
zurich = datetime.datetime(2016, 1, 8, 7, 10)
# datetime.datetime(2016, 1, 8, 7, 10)
# So I'm now converting it to a datetime object which is aware of the
# timezone
zurich = zurich.replace(tzinfo=pytz.timezone('Europe/Zurich'))
# datetime.datetime(2016, 1, 8, 7, 10, tzinfo=<DstTzInfo 'Europe/Zurich' BMT+0:30:00 STD>)
# Let's convert to UTC
zurich = zurich.astimezone(pytz.utc)
# datetime.datetime(2016, 1, 8, 6, 40, tzinfo=<UTC>)
Смещение Цюрих по сравнению с временем UTC составляет +01: 00 (переход на летнее время) или +02: 00 (Летнее время). Почему Python думает, что это +00: 30 ?!
Любая помощь очень ценится (я уже начинаю вытягивать свои волосы).
Нашел в документации здесь: [Http: //pytz.sourceforge .net/# example-usage] (http://pytz.sourceforge.net/#example-usage) К сожалению, использование аргумента tzinfo стандартных конструкторов datetime «не работает» с pytz для многих часовых поясов. – Daniel
Он не может работать, и даже синтаксиса недостаточно, потому что временной континент Continent/City нельзя скрыть без знания, если он находится в режиме DST или STD. Поэтому необходимо вызвать интеллектуальную функцию из pytz, которая получает время и зону, применяет текущие правила управления и настраивает зону на «CET + 1: 00 STD» или «CEST + 2: 00 DST». Стандартные методы datetime не имеют обратного вызова для tzinfo для его настройки, и даже патметр 'is_dst' должен использоваться за час до и после изменения точки от DST до STD, чтобы преобразовать время однозначно. – hynekcer