这可能是一个微不足道的问题,但我不能让django now()在定义的时区settings.TIME_ZONE吗?
这是实际发生的事情:
>>> 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>
Run Code Online (Sandbox Code Playgroud)
Pet*_*ino 13
Django的源代码(如所选答案中所示)解释了以下概念timezone.now():
datetime.now() 产生当前时间(在您的活动时区!)没有时区信息("天真的日期时间"),而...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)
Run Code Online (Sandbox Code Playgroud)
对于新手和普通用户timezone.localtime(timezone.now())来说可能是最直观的.当地时间仍保留时区信息.
或者我可以阅读源代码:
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()
Run Code Online (Sandbox Code Playgroud)
答案是否定的,我必须自己调整。
| 归档时间: |
|
| 查看次数: |
1669 次 |
| 最近记录: |