2012-05-30 38 views
6

这可能是一个微不足道的问题,但我不能让django now()在settings.TIME_ZONE中定义的时区中?是不是django现在()应该在默认时区?

这是什么是真正发生的事情:

>>> from django.utils import timezone 
>>> timezone.now() 
datetime.datetime(2012, 5, 30, 16, 30, 0, 782087, tzinfo=<UTC>) 
>>> timezone.get_default_timezone() 
<DstTzInfo 'Asia/Singapore' SMT+6:55:00 STD> 
+0

我敢打赌'timezone.get_current_timezone()'也是'亚洲/新加坡'。只是为了使图片完整。 – Peterino

回答

1

或者我可以只读取源:

def now(): 
    """ 
    Returns an aware or naive datetime.datetime, depending on settings.USE_TZ. 
    """ 
    if settings.USE_TZ: 
     # timeit shows that datetime.now(tz=utc) is 24% slower 
     return datetime.utcnow().replace(tzinfo=utc) 
    else: 
     return datetime.now() 

答案已被没了,我必须调整它自己。

0

这取决于

NOW() 返回表示当前的时间点时USE_TZ分别是真的还是假的认识或天真的日期时间。

https://docs.djangoproject.com/en/dev/ref/utils/#django-utils-timezone

因此,所有将表明USE_TZ你的情况虚假的,它不是在考虑采取TZ。

+0

他们只是意味着时区感知而不是时区感知日期。措辞似乎暗示他们将在*右边*时区,但显然不是。 –

+0

是的,我根据你的例子阅读了文档来得出这个结论。无论如何,我可能会预料它会使用默认的TZ。 – pcalcao

+1

这个(通常)与'USE_TZ'无关。 'timezone.now()'* always *返回UTC时间。如果你想要本地时间,你需要使用'timezone.localtime()'来转换* presentation *。请注意,时间将与您的'datetime'对象保持相同,时间呈现*和*时区将同时更改。尝试一下比较:''t = timezone.now(); t == timezone.localtime(t)''' – Peterino

9

Django的source code(如显示在所选择的答案)解释了timezone.now()概念:(!在您的活动时区)没有时区信息(“天真的日期时间”)

  1. datetime.now()得到当前的时间,而。 ..
  2. timezone.now()总是产生在UTC的当前时间(!)时区信息。

这是一见钟情,是的。他们本可以决定放弃当前活动时区的时间,但他们没有。您仍然可以使用timezone.localtime(timezone.now())得到你想要的东西:

from django.utils import timezone 
from datetime import datetime 

timezone.get_current_timezone() 
# <DstTzInfo 'Antarctica/McMurdo' LMT+11:39:00 STD> 
datetime.now() 
# datetime.datetime(2014, 8, 19, 20, 8, 8, 440959) 
timezone.localtime(timezone.now()) 
# datetime.datetime(2014, 8, 19, 20, 8, 14, 889429, tzinfo=<DstTzInfo 'Antarctica/McMurdo' NZST+12:00:00 STD>) 
timezone.now() 
# datetime.datetime(2014, 8, 19, 8, 8, 22, 273529, tzinfo=<UTC>) 
datetime.utcnow() 
# datetime.datetime(2014, 8, 19, 8, 8, 29, 769312) 

对于新人和普通用户timezone.localtime(timezone.now())可能是最直观的。当地时间仍然保留时区信息。

相关问题