Я подозреваю, что вы неправильно поняли метод .astimezone()
.
Ваше первоначальное время в UTC
>>> example.created
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<UTC>)
Затем вы изменили информацию о часовом поясе для переменной conv_est
, и она действительно работает как задумано:
>>> conv_est = original_utc.replace(tzinfo=pytz.timezone('US/Eastern'))
>>> conv_est
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)
Если вы печатаете эту переменную, она показывает правильную информацию
>>> print(conv_est)
2019-03-06 14:08:49.841881-04:56
Но когда вы вызываете .astimezone()
без каких-либо аргументов, возвращаемое значение является объектом datetime
в зоне UTC
; это означает, что метод также работает в соответствии с планом, возвращая тот же момент времени, но выраженный как местное время в UTC
(в UTC будет 7 часов вечера / 19 часов, когда в США / восточном направлении - 2 вечера / 14 часов).
>>> print(conv_est.astimezone())
2019-03-06 19:04:49.841881+00:00
Вы можете проверить это самостоятельно, рассчитав разницу (которая будет равна 0):
>>> conv_est == conv_est.astimezone()
True
>>> conv_est - conv_est.astimezone()
datetime.timedelta(0)