我在一个特定的时区(AfricaAlgeria)将一个UNIX时间戳转换为人类格式(抱歉我不知道它的确切名称),它的评估结果是这样的。2020-06-05 19:45:21+01:00
. 我看了一下datetime模块的文档,根据我的理解 +01:00
我不明白的是,既然它已经被转换到了指定的时区,为什么它还会和datetime对象一起返回?
POSIX (UNIX)时间戳代表自1970-01-01 UTC以来的时间,以秒为单位。这里不涉及时区问题。datetime
另一方面,对象可以是天真的(不包含任何时区信息)或时区感知。你所拥有的是一个时区感知的 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对象属于当地时间,即操作系统设置,这意味着不同时区的机器会得到不同的POSIX。例如,我在UTC+2,所以我将得到。
datetime.fromisoformat("2020-06-05 19:45:21").timestamp()
# 1591379121.0
所以我得到的POSIX是:
datetime.fromisoformat("2020-06-05 19:45:21+02:00").timestamp()
# 1591379121.0
不同的是,与 "+02:00"(tzinfo
定义),很明显是怎么回事。