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

问题描述 投票:0回答:1

我在一个特定的时区(AfricaAlgeria)将一个UNIX时间戳转换为人类格式(抱歉我不知道它的确切名称),它的评估结果是这样的。2020-06-05 19:45:21+01:00. 我看了一下datetime模块的文档,根据我的理解 +01:00我不明白的是,既然它已经被转换到了指定的时区,为什么它还会和datetime对象一起返回?

python datetime module timezone offset
1个回答
1
投票

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 定义),很明显是怎么回事。

© www.soinside.com 2019 - 2024. All rights reserved.