/ / django 1.4 timezone.now () vs datetime.datetime.now () - django, fuso orario

django 1.4 timezone.now () vs datetime.datetime.now () - django, fuso orario

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 № 1

Secondo 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 e Django 1.11