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
定义),很明显发生了什么。
我在特定时区 (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
定义),很明显发生了什么。