Je suis un peu confus par le traitement de l'heure avancée
settings.py:
TIME_ZONE = 'Europe/London'
USE_TZ = True
dans le shell 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
pourquoi ne sont-ils pas les mêmes en ce qui concerne l'heure avancée? Les deux devraient être sensibles à la localisation, non?
J'ai lu la documentation mais je ne suis pas plus sage.
Selon timezone.now()
source :
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()
Il est basé sur utc
au lieu de votre fuseau horaire par défaut. Vous pouvez obtenir la même valeur en utilisant
now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)
Depuis Django 1.11, vous pouvez simplement appeler Django.utils.timezone.localtime
pour récupérer datetime
pour votre fuseau horaire par défaut.
>>> from Django.utils import timezone
>>> timezone.localtime()
De docs:
Convertit une date et heure consciente en un fuseau horaire différent, par défaut le fuseau horaire actuel.
Lorsque la valeur est omise, la valeur par défaut est
now()
.Cette fonction ne fonctionne pas sur les datetime naïfs; utilisez
make_aware()
à la place.
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')
Si vous définissez TIME_ZONE = 'Europe/London'
et USE_TZ = True
dans les paramètres Django, vous les placerez dans la section try
et dans la section except
.
[REMARQUE]:
.strftime()
est une optionPython 2.7
et Django 1.11