Unix 到时区的转换,偏移元素

Unix to Timezone Conversion, Offset element

我在特定时区 (Africa/Algeria) 将 UNIX 时间戳转换为人类格式(抱歉,我不知道它的确切名称),并评估为:2020-06-05 19:45:21+01:00。我查看了日期时间模块文档,根据我的理解 +01:00,它是与 UTC 的 +/-HH:MM 偏移量。 我不明白的是为什么它与 datetime 对象一起返回,因为它已经转换为指定的时区? 有人可以向我解释吗? 谢谢

POSIX 时间戳(Unix 时间)表示自纪元 1970-01-01 UTC 以来的秒数。这里不涉及时区问题。另一方面,datetime 对象可以是 naive(不包含任何时区信息)或时区 aware。您拥有的是一个时区感知 datetime 对象——它的字符串表示打印为“2020-06-05 19:45:21+01:00”。如果它是天真的,它只会打印“2020-06-05 19:45:21”。 repr 还应该显示特定时区,例如

print(repr(dt_obj))
>>> datetime.datetime(2020, 6, 5, 19, 45, 21, tzinfo=tzfile('Africa/Algiers'))

重要的一点是2020-06-05 19:45:21+01:00可以无歧义地转换回POSIX时间戳:

from datetime import datetime
datetime.fromisoformat("2020-06-05 19:45:21+01:00").timestamp()
# 1591382721.0

如果不是 +01:00(没有 tzinfo),Python 会假设 datetime 对象属于本地时间,即 OS 设置;这意味着不同时区的机器将获得不同的时间戳。我在 UTC+2,所以我会得到:

datetime.fromisoformat("2020-06-05 19:45:21").timestamp()
# 1591379121.0

给出与

相同的时间戳
datetime.fromisoformat("2020-06-05 19:45:21+02:00").timestamp()
# 1591379121.0

区别在于使用“+02:00”(tzinfo定义),很明显发生了什么。