datetime.fromtimestamp() - 返回我的本地时区而不是 GMT

Posted

技术标签:

【中文标题】datetime.fromtimestamp() - 返回我的本地时区而不是 GMT【英文标题】:datetime.fromtimestamp() - returns my local timezone instead of GMT 【发布时间】:2019-12-29 23:24:34 【问题描述】:

我在将 timestamp 转换为 GMT 时遇到问题。据我所知,timestamp 总是在GMT 时间,所以我希望datetime.fromtimestamp 返回GMT 或时区感知日期时间,但它返回我的本地(布拉迪斯拉发/布拉格)日期时间。

import datetime
datetime.datetime.fromtimestamp(1566720000)
datetime.datetime(2019, 8, 25, 10, 0)

但是根据Epoch Converter是

格林威治标准时间:2019 年 8 月 25 日星期日上午 8:00:00

编辑:datetime.datetime.fromtimestamp(1566720000).tzinfo 不返回任何内容,因此它不知道 tz。

你知道问题出在哪里吗?

【问题讨论】:

【参考方案1】:

fromtimestamp() 返回本地日期和时间。如果需要 tz-aware,则必须指定参数 tz:

https://docs.python.org/3/library/datetime.html#datetime.datetime.fromtimestamp

返回POSIX时间戳对应的本地日期时间, 例如由 time.time() 返回。如果可选参数 tz 为 None 或 未指定,时间戳转换为平台的本地日期 和时间,返回的 datetime 对象是幼稚的。

如果您需要 UTC 日期时间对象,请改用 utcfromtimestamp:

datetime.utcfromtimestamp(timestamp)

【讨论】:

【参考方案2】:

看起来你想要utcfromtimestamp

>>> datetime.datetime.utcfromtimestamp(1566720000)
datetime.datetime(2019, 8, 25, 8, 0)

请记住,这仍然会返回一个简单的日期时间对象

【讨论】:

如果你想避免因为天真的日期而减少,我解决了这个问题: datetime.fromtimestamp((datetime.now(timezone.utc).timestamp() + next_level_info['upgrade_time']), timezone.utc)

以上是关于datetime.fromtimestamp() - 返回我的本地时区而不是 GMT的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?

python基础datetime类各种坑

datetime转换

日期时间类型转换

Python Datetime格式转换

删除Qube中超过10天的作业