Дата и время печати без смещения - PullRequest
0 голосов
/ 06 марта 2019

В настоящее время я пытаюсь преобразовать время из UTC, и проблема, с которой я сталкиваюсь, заключается в том, что смещения кажутся обратными. Как вы можете видеть, когда я конвертирую UTC в EST, он показывает смещение -4: 56, но когда я печатаю время, он добавляет 4:56, а не так, как должно быть. Я действительно хотел бы иметь возможность конвертировать время UTC в любой другой часовой пояс и отображать там местное время без смещения, чтобы UTC здесь было преобразовано во что-то вроде 2019-03-06 9:12 EST.

>>> example.created
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<UTC>)
>>> original_utc = example.created
>>> original_utc
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<UTC>)
>>> 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
>>> print(conv_est.astimezone())
2019-03-06 19:04:49.841881+00:00

1 Ответ

1 голос
/ 06 марта 2019

Я подозреваю, что вы неправильно поняли метод .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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...