Saltar al contenido

Obtener la zona horaria local en django

Después de consultar con expertos en esta materia, programadores de varias ramas y maestros hemos dado con la respuesta a la pregunta y la dejamos plasmada en este post.

Solución:

La documentación de Django para zonas horarias documenta todos los detalles necesarios para convertir datetime objetos a la zona horaria adecuada para su visualización.

Sus datos se almacenan en UTC, lo cual es bueno. Cuando obtienes un DateTime objeto de campo de la base de datos será un ingenuo datetime.datetime objeto. es decir, una fecha/hora sin zona horaria adjunta. Entonces depende de usted hacer la conversión.

El usuario de su aplicación web puede estar en diferentes zonas horarias, por lo que la conversión a una zona horaria adecuada debe ocurrir para cada solicitud. Es por eso que hay una función de activación para configurar la zona horaria actual.

Si tiene pytz instalado, debería poder hacer lo siguiente:

from django.utils.timezone import activate
activate(settings.TIME_ZONE)

Toda la salida del campo de fecha en el motor de plantillas convertirá automáticamente sus objetos de fecha y hora ingenuos a la zona horaria correcta para su visualización.

Si solo tienes un solo ingenuo datetime.datetime instancia en la que desea configurar la zona horaria, simplemente use el pytz módulo directamente. Sin embargo, no es normal hacer esto en sus vistas, ya que es una buena idea convertir solo la zona horaria en el punto de presentación.

from pytz import timezone

settings_time_zone = timezone(settings.TIME_ZONE)
last_updated = last_updated.astimezone(settings_time_zone)

Después de llorar mucho, pude mostrar la fecha correcta para mi país haciendo algo como esto:

>>> from django.utils.timezone import get_current_timezone
>>> from front.models import Training

>>> tz = get_current_timezone()
>>> stored_date = Training.objects.first().start_date
datetime.datetime(2015, 4, 25, 17, 0, tzinfo=)

>>> desired_date = stored_date + tz.utcoffset(stored_date)
datetime.datetime(2015, 4, 25, 14, 0, tzinfo=)

Él tzinfo attribute se muestra utc, pero la fecha y la hora son correctas para mostrar.

ACTUALIZACIÓN 30/10/2015 (Django 1.8)

Hoy estoy usando otro enfoque, que es más amigable con Django.

>>> from django.utils import timezone
>>> from trainings.models import Training
>>> value = Training.objects.first().date

>>> value
datetime.datetime(2015, 10, 23, 11, 32, 54, 633151, tzinfo=)

>>> timezone.localtime(value)
datetime.datetime(2015, 10, 23, 9, 32, 54, 633151, tzinfo=)

hora local es un filtro de plantilla, esto puede ser útil.

https://github.com/django/django/blob/1.8.4/django/utils/timezone.py#L298

Ejemplo de código:

from django.utils.timezone import localtime 

desired_datetime = localtime(stored_datetime)

Reseñas y valoraciones

Si estás contento con lo expuesto, eres capaz de dejar una noticia acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *