Почему не зависящий от часового пояса объект с датой и временем в другом часовом поясе с другим часовым поясом дает одинаковую unix -метку времени? - PullRequest
0 голосов
/ 07 апреля 2020

Итак, насколько я понимаю, если вы конвертируете без часового пояса из или в unix -временную метку, вы всегда получите GMT ​​/ UT C, например:

import datetime
import pytz
datetime.datetime(2020,4,1,0,0,0).timestamp()

В результате отметка времени равна 1585692000.

Теперь, если я сделаю это:

(pytz.timezone("Europe/Berlin").localize(datetime.datetime(2020,4,1,0,0,0))).timestamp()

Она выдаст такую ​​же отметку времени unix.

Если я введу дату и скажу программа, у которой эта дата-время имеет часовой пояс GMT + 1, тогда ее значение UT C должно быть смещено на 1 час, а поскольку unix -временная метка всегда равна UT C, она также должна быть другой, но она такая же .

Почему? Какое из моих предположений неверно?

1 Ответ

3 голосов
/ 07 апреля 2020

UNIX метки времени не имеют часового пояса, они всегда express количество секунд, прошедших с 1 января 1970 года 00:00 UT C. Это число одинаково во всем мире, оно не меняется с вашим часовым поясом. Предполагается, что

Наивные datetime экземпляры представляют местное время, а [timestamp] зависит от платформы C * Функция 1006 * для выполнения преобразования.

https://docs.python.org/3/library/datetime.html#datetime .datetime.timestamp

Итак, если вы находитесь в Европе / Берлине, то наивный datetime и datetime, локализованные в Европе / Берлине, интерпретируются одинаково при преобразовании в метку времени. Попробуйте выполнить локализацию для других часовых поясов, что означает, что 2020, 4, 1, 0, 0, 0 на самом деле относится к другому времени, и вы также увидите разные временные метки.

...