很确定这很简单,但我不明白。
我的本地TZ当前为GMT + 3,当我从datetime.utcnow().timestamp()
中获取时间戳时,确实比datetime.now().timestamp()
少了3小时
在流程中的另一个过程中,我使用了该utc时间戳,需要将其转换为日期时间。
[当我执行fromtimestamp
时,我得到了正确的utc小时,但是当我使用utcfromtimestamp
时,我又得到了3个小时的偏移。
不过,文档要求我将fromtimestamp
用于本地时区,将utcfromtimestamp
用于utc。
我想念什么?这两个函数的初始假设是时间戳是在本地时区给出的吗?
谢谢:)
[同时使用datetime
对象及其POSIX时间戳时要注意的关键是,Python假定朴素的datetime
对象(没有时区信息的对象)是指本地时间。相反,POSIX时间戳(应该)始终指的是自该时期以来的UTC秒。您可以通过time.time()
明确获得它。在您的示例中,发生了奇怪的事情。
1] time.time()
-datetime.utcnow()为您提供了一个类似于UTC的天真日期时间对象,但是,如果您使用timestamp(),Python会假定(因为天真)datetime.utcnow().timestamp()
对象是本地时间。 (!)生成的时间戳与UTC不一致...
2] datetime
-datetime.now()为您提供了一个类似于本地时间的幼稚datetime对象,如果您使用datetime.now().timestamp()
,则结果实际上是正确的。
一个代码示例。让我们做一些时间戳记。请注意,我使用的是UTC + 2,因此偏移量是-7200秒。
timestamp()