Estás interpretando esto mal. La base de datos almacena una hora UTC la mayor parte del tiempo. Si usa PostgreSQL, la base de datos puede almacenar una hora con información de la zona horaria, pero para fines prácticos (*) es más fácil pensar que la hora en su base de datos se almacena como UTC (es decir, como una hora absoluta que se puede convertir a cualquier hora zona) cuando USE_TZ = True
. Siempre representa un punto correcto en el tiempo para el que no es necesario recordar ni suponer ninguna zona horaria. Y hasta donde yo sé, Django siempre almacenará la hora en la zona horaria UTC.
Entonces, cuando estás recuperando el objeto de tiempo usando select
en psql , está recuperando la hora en la zona horaria local de su máquina (la zona horaria en la que está ejecutando psql). Si alguien en "América/Nueva_York" ejecutara la misma consulta de selección, vería una marca de tiempo -04. Si la fecha hubiera sido 2019-03-20, habrías visto 2019-03-20 10:50:00+00
porque en esa fecha, Europa/Londres y UTC eran lo mismo.
Al obtener el valor de un DateTimeField
como python datetime.datetime
objeto, Django siempre obtiene el valor UTC, porque:
Esto facilita el trabajo con estos objetos de fecha y hora en su código python:siempre son horas UTC.
Si desea imprimir estos valores en un PDF, use los mismos métodos que usa Django para la representación de la plantilla:
from django.utils import timezone
print(timezone.template_localtime(Booking.objects.get(pk=280825).start))
Esto representa la fecha y hora en la zona horaria predeterminada (o si activate()
una zona horaria diferente, en la zona horaria actual ).
(*) Nota:¿Por qué no debe dar ningún significado a la zona horaria guardada en su base de datos y solo pensar en ella como si todo fuera UTC? Si tuviera que ejecutar servidores en varias zonas horarias, en realidad podría terminar guardando marcas de tiempo en diferentes zonas horarias . Todavía son todos correctos (marcas de tiempo absolutas) y se pueden convertir a cualquier otra zona horaria. Entonces, básicamente, la zona horaria utilizada para guardar no tiene sentido.