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

datetime.fromtimestamp() - returns my local timezone instead of GMT

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

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 returns 没有,所以它不知道 tz。

你知道问题出在哪里吗?

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

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

Return the local date and time corresponding to the POSIX timestamp, such as is returned by time.time(). If optional argument tz is None or not specified, the timestamp is converted to the platform’s local date and time, and the returned datetime object is naive.

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

datetime.utcfromtimestamp(timestamp)

看起来你想要utcfromtimestamp

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

Keep in mind this still returns a naive datetime object

使用 datetime.datetime.utcfromtimestamp() 不是一个好主意。它 returns 是一个天真的日期时间对象(没有时区信息),许多函数会将其解释为您当地时区的 datetime!使用时区感知对象要好得多。

以下代码 returns 时区感知 datetime UTC 时区。

>>> import datetime
>>> datetime.datetime.fromtimestamp(1566720000, datetime.timezone.utc)
datetime.datetime(2019, 8, 25, 8, 0, tzinfo=datetime.timezone.utc)