pytz.astimezone не учитывает летнее время?
1 июня 2013 года я ожидаю, что часовой пояс "PST8PDT" будет вести себя как GMT+7, так как это летнее время в этом часовом поясе. Однако он ведет себя как GMT+8:
>>> import pytz, datetime
>>> Pacific = pytz.timezone("PST8PDT")
>>> datetime.datetime(2013, 6, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 20, 0, tzinfo=<UTC>)
напротив, 1 января 2013 года он ведет себя (правильно), как GMT+8:
>>> datetime.datetime(2013, 1, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)
что я делаю не так? Заранее спасибо!
1 ответов
вы не можете назначить часовой пояс в datetime
конструктор, потому что он не дает объекту часового пояса возможность настроить летнее время - дата ему недоступна. Это вызывает еще больше проблем для некоторых частей мира, где название и смещение часового пояса изменились с годами.
к сожалению, используя аргумент tzinfo стандартных конструкторов datetime ‘не работает’ с pytz для многих часовых поясов.
использовать localize
метод с наивным datetime вместо этого.
>>> Pacific.localize(datetime.datetime(2013, 6, 1, 12)).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 19, 0, tzinfo=<UTC>)
>>> Pacific.localize(datetime.datetime(2013, 1, 1, 12)).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)