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)
极端情况下的值可能不同。
我有一个 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)
极端情况下的值可能不同。