Django 的源代码(如所选答案所示)解释了以下概念timezone.now()
:
datetime.now()
产生没有时区信息(“naive datetime”)的当前时间(在您的活动时区!),而...
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())
来说可能是最直观的。仍保留时区信息的本地时间。