utils today timezones iana django timezone

today - timezone django python



django 1.4 timezone.now() vs datetime.datetime.now() (3)

De acuerdo con 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()

Se basa en utc lugar de su zona horaria predeterminada. Usted podría lograr el mismo valor mediante el uso de

now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone()) print now.astimezone(timezone.utc)

Estoy un poco confundido por el manejo de ahorro de luz del día

settings.py:

TIME_ZONE = ''Europe/London'' USE_TZ = True

en el caparazón 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 qué no son lo mismo con respecto a los ahorros de luz diurna? Ambos deben ser conscientes de la configuración regional, ¿no?

He leído los documentos pero no soy más sabio.


Desde Django 1.11 puedes simplemente llamar a django.utils.timezone.localtime para obtener el datetime para tu zona horaria predeterminada.

>>> from django.utils import timezone >>> timezone.localtime()

De documentos:

Convierte un horario de atención a una zona horaria diferente, de forma predeterminada, la zona horaria actual.

Cuando se omite el valor, el valor predeterminado es now() .

Esta función no funciona en fechas de tiempo ingenuas; use make_aware() lugar.


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 configura TIME_ZONE = ''Europe/London'' y USE_TZ = True en la configuración de Django, lo colocará en la sección de try y, en caso contrario, en la sección de except .

[ NOTA ]:

  • .strftime() es una opción
  • Estas pruebas en Python 2.7 y Django 1.11