di Django source code (come visualizzato nella risposta scelta) spiega il concetto di timezone.now()
: (! Nel tuo fuso orario attiva)
datetime.now()
cede il tempo corrente senza informazioni fuso orario ("datetime naive"), mentre. ..
timezone.now()
sempre produce il ora corrente a UTC (!) con informazioni sul fuso orario.
Questo è irritante a prima vista, sì. Avrebbero potuto decidere di fornire l'ora corrente del fuso orario attivo, ma non l'hanno fatto. È comunque possibile utilizzare timezone.localtime(timezone.now())
per ottenere ciò che si vuole:
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)
Per i nuovi arrivati e gli utenti ordinari timezone.localtime(timezone.now())
è probabilmente il più intuitivo. Un'ora locale che conserva ancora le informazioni sul fuso orario.
Scommetto che "timezone.get_current_timezone()" è anche "Asia/Singapore". Solo per rendere l'immagine completa. – Peterino