如何打印UTC UNIX Epoch/时间戳



当我使用类似time.time()的东西打印unix epoch时,它似乎在我的本地时区打印时间戳。尤其是从转换器的角度来看:https://www.epochconverter.com告诉我。

有人知道我如何打印UNIX Epoch/时间戳,但实际上是用UTC时间吗?非常感谢。

没有"UTC UNIX Epoch时间";。有一个UNIX时代。全世界都一样。它与时区无关。只要计算机的时钟设置正确,time.time()就会为您提供正确的UNIX epoch时间。datetime.datetime.now().timestamp()将为您提供相同的UNIX Epoch时间。你不需要转换任何东西,也没有什么可以转换的。

现在,针对Deepak的评论,我认为这很重要:

我确实收到了datetime.now()datetime.utcnow()的不同响应,对应于我的当地时间和UTC。因此,对我来说,经过的秒数相差19800秒(时区为+5:30(。

这是datetime.utcnow的一个已知缺陷,实际上已在手册中解决:

警告:由于许多datetime方法将初始datetime对象视为本地时间,因此最好使用感知日期时间来表示UTC中的时间。因此,创建以UTC表示当前时间的对象的推荐方法是调用datetime.now(timezone.utc)

要稍微打开包装:

当您调用datetime.now()时,它会为您返回当前本地时间的天真datetime对象(意味着它没有连接tzinfo时区(:

>>> datetime.now()
datetime.datetime(2021, 4, 16, 9, 50, 3, 571235)

这个时间代表了我当前的挂钟时间,但它不知道它在哪个时区。所以这个时间戳实际上可以代表这个星球上大约20多个不同的绝对时间戳,这取决于你把它当作什么时区。

当使用此对象的timestamp()方法将其转换为绝对UNIX时间戳时,必须假设某个时区。Python将假定计算机的本地时区进行转换。这对datetime.now()来说很好,因为这个时间戳是用我的本地时间创建的:

>>> datetime.now().timestamp()
1618559403.571235

这是撰写本文时正确的UNIX时间戳。不是"对于我的本地时区">,但全局。在撰写本文时,世界各地都是1618559403

现在,如果您使用datetime.utcnow(),它将为您提供当前UTC时间的天真时间戳:

>>> datetime.utcnow()
datetime.datetime(2021, 4, 16, 7, 50, 3, 571235)

请注意它是如何从上一个datetime.now()关闭2小时的,这很好,因为这是UTC时区中的当前本地时间。但由于这个时间戳仍然很天真,当将其转换为UNIX时间戳时,Python必须假设某个时区,并将假设我的本地时区。所以它给了我本地时间7:50:03的UNIX时间戳:

>>> datetime.utcnow().timestamp()
1618552203.571235

这不是当前的UNIX时间还有两个小时就要下班了。这是两个小时前的UNIX时间。

如果我们能正确地做到这一点,通过创建一个感知的时间戳并获取其UNIX时间,我们就会得到正确的UNIX时间:

>>> datetime.now(timezone.utc)
datetime.datetime(2021, 4, 16, 7, 50, 3, 571235, tzinfo=datetime.timezone.utc)
>>> datetime.now(timezone.utc).timestamp()
1618559403.571235

请注意,人类可读时间与datetime.utcnow()的时间相同,但UNIX时间戳正确地为,即datetime.now().timestamp()的时间戳。这也与我们在time.time():中得到的相同

>>> from time import time
>>> time()
1618559403.571235

将此粘贴到https://www.epochconverter.com,您参考的:

格林尼治标准时间:2021年4月16日,星期五07:50:03.571
您的时区:2021年04月16日星期五09:50:03.571 GMT+02:00夏令时

这是正确的。在UTC/GMT中,此UNIX时间戳表示上午7:50,在我的本地时区中为上午9:50。

如果我们取不正确的天真datetime.utcnow()时间戳1618552203.571235,结果是:

格林尼治标准时间:2021年4月16日,星期五05:50:03.571
您的时区:2021年04月16日星期五07:50:03.571 GMT+02:00夏令时

这是不正确的。那是两个小时前的事了,不是现在。

最新更新