Python: UT C против местного времени - PullRequest
0 голосов
/ 31 марта 2020

Почему следующие значения возвращают разные временные метки? Это потому, что datetime.utcnow () не имеет часового пояса? Мне кажется, что tzinfo = ut c является избыточным, поэтому я, вероятно, не понимаю, что такое utcnow () и как число UT C не может иметь часовой пояс , Я думаю, что есть причина, поэтому, пожалуйста, сообщите мне:)

from datetime import datetime
from pytz import utc

local_seconds = int(datetime.utcnow().timestamp())
utc_seconds = int(datetime.utcnow().replace(tzinfo=utc).timestamp())

Моя цель - получить метку времени UT C. Похоже, что первый метод возвращает локальную метку времени (поправьте меня, если я ошибаюсь)

РЕДАКТИРОВАТЬ: Где я живу, часовой пояс GMT-5. На самом деле:

(utc_seconds-local_seconds)/3600 # is equal to -5.0

1 Ответ

0 голосов
/ 31 марта 2020

Следующие два утверждения всегда будут возвращать разные результаты.

local_seconds = int(datetime.utcnow().timestamp())
utc_seconds = int(datetime.utcnow().replace(tzinfo=utc).timestamp())

Вывод:

1585584790
1585604590

Вы спрашиваете, почему? Потому что к тому времени, когда выполняется первый оператор, во время выполнения уходит некоторое время, и теперь второй оператор принесет вам другой результат, потому что datetime.utcnow() для второго оператора изменился.

То, что я предполагаю, вы хотите посмотрим, дадут ли обе операции один и тот же результат или нет? Они определенно дали бы те же результаты:

  1. Если бы вы предоставили им тот же ввод?
  2. Если бы вы выполнили аналогичную операцию из общей библиотеки.

Чтобы решить 1. измените ваш код следующим образом.

same_time_input = datetime.utcnow()

local_seconds = int(same_time_input.timestamp())
utc_seconds = int(same_time_input.replace(tzinfo=utc).timestamp())

Тем не менее вывод не будет таким же, потому что вы используете внешнюю библиотеку, а функция замены не работает, как вы ожидали.

Если вы распечатаете tzinfo из same_time_input, вы увидите, что в нем нет информации о часовом поясе, причину которой можно прочитать здесь. -> Почему datetime.datetime.utcnow () не содержит информацию о часовом поясе?

print(same_time_input.tzinfo)

Теперь вы пытаетесь предоставить ему информацию о часовом поясе, используя отдельную библиотеку, которая имеет разные внутренняя реализация, приводящая к slightly off результатам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...