Sono un po 'confuso dalla gestione dell'ora legale
settings.py:
TIME_ZONE = "Europe/London"
USE_TZ = True
nel guscio del django:
>>> from django.utils import timezone
>>> import datetime
>>> print timezone.now()
2012-05-28 11:19:42.897000+00:00
>>> print timezone.make_aware(datetime.datetime.now(),timezone.get_default_timez
one())
2012-05-28 12:20:03.224000+01:00
perché non sono gli stessi rispetto all'ora legale? Entrambi dovrebbero essere localizzati, no?
Ho letto i documenti ma non ne sono il più saggio.
risposte:
54 per risposta № 1Secondo 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()
È basato su utc
invece del fuso orario predefinito. Puoi ottenere lo stesso valore usando
now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)
5 per risposta № 2
Da quando Django 1.11 puoi semplicemente chiamare django.utils.timezone.localtime
a prendere datetime
per il fuso orario predefinito.
>>> from django.utils import timezone
>>> timezone.localtime()
Da documenti:
Converte un datetime consapevole in un fuso orario diverso, per impostazione predefinita il fuso orario corrente.
Quando il valore viene omesso, viene impostato automaticamente
now()
.Questa funzione non funziona su dati naive; uso
make_aware()
anziché.
0 per risposta № 3
from datetime import datetime
from django.utils import timezone
def now():
try:
return timezone.localtime(timezone.now()).strftime("%Y-%m-%dT%H:%M:%S")
except Exception as exp:
print("TimeZone is not set - {}".format(exp))
return datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
Se si imposta TIME_ZONE = "Europe/London"
e USE_TZ = True
in ambientazione Django, inserirai nel try
sezione e altro, nel except
sezione.
[NOTA]:
.strftime()
è un'opzione- Questi testati su
Python 2.7
eDjango 1.11