为什么具有不同时区的时区未知和时区感知日期时间对象会产生相同的 unix 时间戳?
Why do a timezone-unaware and a timezone-aware datetime object with a different timezone yield the same unix-timestamp?
因此,据我了解,如果您在没有时区的情况下从 unix 时间戳转换或转换为 unix 时间戳,您将始终得到 GMT/UTC,如下所示:
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,那么它的 UTC 值应该偏移 1 小时,并且由于 unix 时间戳总是 UTC,它也应该不同,但都是一样的
为什么?我的哪个假设是错误的?
UNIX 时间戳没有时区,它们始终表示自 1970 年 1 月 1 日以来经过的秒数 00:00 UTC。该数字在全球范围内都是相同的,不会随您所在的时区而改变。
Naive datetime
instances are assumed to represent local time and [timestamp
] relies on the platform C mktime()
function to perform the conversion.
https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp
因此,如果您在 Europe/Berlin 中,那么在转换为时间戳时,本地化 datetime
和本地化为 Europe/Berlin 的 datetime
的解释方式相同。尝试本地化到其他时区,这意味着 2020, 4, 1, 0, 0, 0
实际上 指的是不同的时间,您也会看到不同的时间戳。
因此,据我了解,如果您在没有时区的情况下从 unix 时间戳转换或转换为 unix 时间戳,您将始终得到 GMT/UTC,如下所示:
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,那么它的 UTC 值应该偏移 1 小时,并且由于 unix 时间戳总是 UTC,它也应该不同,但都是一样的
为什么?我的哪个假设是错误的?
UNIX 时间戳没有时区,它们始终表示自 1970 年 1 月 1 日以来经过的秒数 00:00 UTC。该数字在全球范围内都是相同的,不会随您所在的时区而改变。
Naive
datetime
instances are assumed to represent local time and [timestamp
] relies on the platform Cmktime()
function to perform the conversion.https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp
因此,如果您在 Europe/Berlin 中,那么在转换为时间戳时,本地化 datetime
和本地化为 Europe/Berlin 的 datetime
的解释方式相同。尝试本地化到其他时区,这意味着 2020, 4, 1, 0, 0, 0
实际上 指的是不同的时间,您也会看到不同的时间戳。