Python utcfromtimestamp 和 fromtimestamp 输出相同的值?

Python utcfromtimestamp and fromtimestamp output same value?

我有一个 Python+Django 应用程序,它以 UTC 格式存储所有内容,并且在设置中有 TIME_ZONE = 'UTC'USE_TZ = True。转换 POSIX 时间戳时,我从两种类型的 fromtimestamp:

得到相同的输出
start_seconds = 1461798000000 / 1000.0

start = datetime.datetime.utcfromtimestamp(start_seconds)
print('With utc: %s' % start)
>>>> With utc: 2016-04-27 23:00:00

start2 = datetime.datetime.fromtimestamp(start_seconds)
print('Without utc: %s' % start2)
>>>> Without utc: 2016-04-27 23:00:00

为什么会这样?

运行 您的代码给了我预期的结果,它们是相对于各自时区的偏移量的原始日期时间。根据 epochconverter,您提供的时间戳是 2016-04-27 23:00:00 UTC

In[23]: import datetime
In[24]: start_seconds = 1461798000000 / 1000.0
In[25]: start = datetime.datetime.utcfromtimestamp(start_seconds)
In[26]: print('With utc: %s' % start)
With utc: 2016-04-27 23:00:00  # Correct UTC time
In[27]: start2 = datetime.datetime.fromtimestamp(start_seconds)
In[28]: print('Without utc: %s' % start2)
Without utc: 2016-04-27 19:00:00  # Correct EDT time (my local timezone)

如果 fromtimestamp()ucfromtimestamp() return 相同的值则意味着本地时区在给定时间具有零 utc 偏移量。 Django 设置您的本地时区(TZ envvar),以反映在您的情况下为 UTC 的 TIME_ZONE 设置,并且(显然)UTC 中的 utc 偏移量为零。

获取对应于给定 POSIX 时间戳的时区感知日期时间对象:

from datetime import datetime, timedelta
import pytz

dt = datetime(1970, 1, 1, tzinfo=pytz.utc) + timedelta(seconds=start_seconds)

转换Unix时间:

dt = datetime.fromtimestamp(start_seconds, pytz.utc)

极端情况下的值可能不同。