Django, python почему временная метка меняется после локализации

CODE:

import pytz
from django.utils import timezone

KST = pytz.timezone('Asia/Seoul')
UTC = pytz.timezone('UTC')

default_time = timezone.datetime(2021, 11, 29, 16, 44)

current_manual_kst = KST.localize(default_time)
current_manual_utc = default_time
print(current_manual_kst.timestamp())
print(current_manual_utc.timestamp())

РЕЗУЛЬТАТ:

>>> 1638171840.0
>>> 1638204240.0

Итак, я вижу, что результаты разные.

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

Почему это произошло? И как получить те же временные метки (по умолчанию: UTC) из KST.localized datetime?

А timestamp выражается в UNIX-времени, которое представляет собой количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Чтобы преобразовать datetime в такую временную метку UNIX, эту datetime нужно интерпретировать как некоторого часового пояса. Потому что вы не можете выразить его относительно 1970 UTC, не определив, в каком часовом поясе он находится. Поэтому если у вас есть наивный объект datetime (без временной зоны) и вы берете его timestamp(), он интерпретируется как находящийся в вашем местном часовом поясе и преобразуется в UTC оттуда.

А 16:44 в Сеуле - это, очевидно, другое время, чем 16:44 в "местном" часовом поясе вашего компьютера.

Вернуться на верх