de Django source code (como aparece en la respuesta elegida) explica el concepto de timezone.now()
: (en su zona horaria activa)
datetime.now()
se obtiene la hora actual sin información de zona horaria ("fecha y hora ingenua"), mientras que. ..
timezone.now()
siempre se obtiene la hora actual en GMT (!) con información de zona horaria.
Esto es irritante a primera vista, sí. Podrían haber decidido dar la hora actual de la zona horaria activa, pero no lo hicieron. Puede seguir utilizando timezone.localtime(timezone.now())
para conseguir lo que quiere:
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)
Para los recién llegados y los usuarios normales timezone.localtime(timezone.now())
es probablemente el más intuitivo. Una hora local que aún conserva información de zona horaria.
Apuesto a que 'timezone.get_current_timezone() 'también es' Asia/Singapore '. Solo para completar la imagen. – Peterino