Следующие два утверждения всегда будут возвращать разные результаты.
local_seconds = int(datetime.utcnow().timestamp())
utc_seconds = int(datetime.utcnow().replace(tzinfo=utc).timestamp())
Вывод:
1585584790
1585604590
Вы спрашиваете, почему? Потому что к тому времени, когда выполняется первый оператор, во время выполнения уходит некоторое время, и теперь второй оператор принесет вам другой результат, потому что datetime.utcnow()
для второго оператора изменился.
То, что я предполагаю, вы хотите посмотрим, дадут ли обе операции один и тот же результат или нет? Они определенно дали бы те же результаты:
- Если бы вы предоставили им тот же ввод?
- Если бы вы выполнили аналогичную операцию из общей библиотеки.
Чтобы решить 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
результатам.