Python utcfromtimestamp和fromtimestamp输出相同的值?

时间:2016-04-27 19:41:39

标签: python django python-2.7 datetime django-1.9

我有一个Python + Django应用程序,它以UTC格式存储所有内容,并在设置中有<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script> <script>var $j = jQuery.noConflict(true);</script> <script> $(document).ready(function(){ console.log($().jquery); // This prints v1.11.0 console.log($j().jquery); // This prints v1.8.3 }); TIME_ZONE = 'UTC'。转换POSIX时间戳时,我从USE_TZ = True两种风格获得相同的输出:

fromtimestamp

为什么会这样?

2 个答案:

答案 0 :(得分:1)

如果fromtimestamp()ucfromtimestamp()返回相同的值,则表示本地时区在给定时间具有零utc偏移量。 Django设置您的本地时区(TZ envvar),以反映您的案例中的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)

边缘情况下的值可能不同。

答案 1 :(得分:0)

运行代码会给我预期的结果,这些结果是与各自时区偏移的天真日期时间。根据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)