Моя функция принимает строку даты и времени UTC в качестве параметра, преобразует ее в объект даты и времени, который затем мне нужно сместить на EST (GMT -4:00). Например, передача «2019-07-01T00:00:00Z» функции должна вернуть «30/06/2019 08:00:00».
Вот как я реализовал подкласс для 'tzinfo' и его стандартные методы.
from datetime import datetime, tzinfo, timedelta
class EST(tzinfo):
def tzname(self, dt):
return "US/Eastern"
def utcoffset(self, dt):
return timedelta(hours=-4) + self.dst(dt)
def dst(self, dt):
return timedelta(0)
TEST_UTC = "2019-07-01T00:00:00Z"
dt_object = datetime.strptime(TEST_UTC, "%Y-%m-%dT%H:%M:%SZ") # String to datetime object -> 2019-07-01 00:00:00
print(dt_object.astimezone(EST()))
Ожидаемый вывод для последнего оператора печати: 2019-06-30 20:00:00-04:00, но программа возвращает 2019-06-30 14:30:00-04: 00. Он показывает ожидаемый результат, только если я устанавливаю значения в «timedelta» функции «utcoffset» на timedelta(hours=1, minutes=30)
.
Обратите внимание, что я хочу реализовать это, используя только библиотеку datetime.