django,python 为什么时间戳在本地化后发生变化

django, python why timestamp changes after localize

代码:

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

所以,我可以看出结果不同。

我认为时间戳应该相同,但结果却不同。

为什么会这样? 以及如何从 KST.localized datetime?

获取相同的时间戳(默认:UTC)

A timestamp 以 UNIX 时间表示,这是自 1970 年 1 月 1 日午夜 UTC 以来的秒数。为了将 datetime 转换为这样的 UNIX 时间戳,需要将 datetime 解释为 some 时区。因为如果不定义它所在的时区就无法相对于 1970 UTC 来表达它。所以如果你有一个天真的 datetime 对象(没有时区)并取其 timestamp() 它是解释为您当地的时区 并从那里转换为 UTC。

首尔的 16:44 显然与计算机“本地”时区的 16:44 不同。