Estou um pouco confuso com o manuseio da economia de luz do dia
settings.py:
TIME_ZONE = "Europe/London"
USE_TZ = True
no shell do 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
Por que eles não são iguais em relação ao horário de verão? Ambos devem estar cientes do local, não?
Eu li os documentos, mas não sou o mais sábio.
Respostas:
54 para resposta № 1De acordo com 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()
É baseado em utc
em vez do seu fuso horário padrão. Você poderia conseguir o mesmo valor usando
now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)
5 para resposta № 2
Desde o Django 1.11 você pode simplesmente ligar django.utils.timezone.localtime
buscar datetime
para o fuso horário padrão.
>>> from django.utils import timezone
>>> timezone.localtime()
De docs:
Converte um datetime com reconhecimento em um fuso horário diferente, por padrão, o fuso horário atual.
Quando o valor é omitido, o padrão é
now()
.Esta função não funciona em tempos de dados ingênuos; usar
make_aware()
em vez de.
0 para resposta № 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 você definir TIME_ZONE = "Europe/London"
e USE_TZ = True
na configuração do Django, você colocará no try
seção e mais, no except
seção.
[NOTA]:
.strftime()
é uma opção- Estes testados em
Python 2.7
eDjango 1.11