Самый простой, но не supersmart решение использует timedelta
import datetime
>>> now = datetime.datetime.utcnow()
US/Eastern на 5 часов меньше, чем в UTC, так что давайте просто создать thouse пять часов в качестве объекта timedelta и сделать его отрицательным, так что при чтении назад наш код, который мы можем видеть, что смещение -5, и что нет никакой магии, чтобы решить, когда добавлять и когда вычесть смещение часового пояса
>>> eastern_offset = -(datetime.timedelta(hours=5))
>>> eastern = now + eastern_offset
>>> now
datetime.datetime(2016, 8, 26, 20, 7, 12, 375841)
>>> eastern
datetime.datetime(2016, 8, 26, 15, 7, 12, 375841)
Если мы хотим, чтобы исправить DST, мы бы запустить DateTime через smoething как это (не совсем точные, временные интервалы не мои xpertise (прибегая к помощи немного теперь меняется каждый год, гадость))
if now.month > 2 and now.month < 12:
if (now.month == 3 and now.day > 12) or (now.month == 11 and now.day < 5):
eastern.offset(datetime.timedelta(hours=5))
Вы могли бы пойти даже более подробно, добавьте часы, выяснить, как именно она меняется каждый год ... Я не собираюсь идти через все это :)
Вы могли бы написать свою собственную функцию, которая добавила бы/вычитала timedelta – iScrE4m
да, я бы хотел этого избежать, потому что тогда вам нужно правильно отслеживать правильный сдвиг? –
Yah, но я не могу думать иначе:/Вы всегда можете написать свой собственный pytz: D https://github.com/newvem/pytz/tree/master/pytz – iScrE4m