Você está interpretando isso de forma errada. O banco de dados armazena um horário UTC na maioria das vezes. Se você usa PostgreSQL, o banco de dados pode armazenar uma hora com informações de fuso horário, mas para fins práticos (*) é mais fácil pensar que a hora em seu banco de dados é armazenada como UTC (ou seja, como uma hora absoluta que pode ser convertida para qualquer hora zona) quando
USE_TZ = True
. Ele sempre representa um ponto correto no tempo para o qual você não precisa lembrar ou assumir nenhum fuso horário. E até onde eu sei, o Django sempre armazenará a hora com reconhecimento de tempo no fuso horário UTC. Então, quando você está buscando o objeto de tempo usando
select
em psql , você está retornando a hora no fuso horário local da sua máquina (o fuso horário em que você está executando o psql). Se alguém em "America/New_York" executasse a mesma consulta de seleção, ela veria um timestamp -04. Se a data fosse 20-03-2019, você teria visto 2019-03-20 10:50:00+00
porque naquela data, Europa/Londres e UTC eram os mesmos. Ao buscar o valor de um
DateTimeField
como um python datetime.datetime
objeto, o Django sempre busca o valor UTC, porque:Isso facilita o trabalho com esses objetos de data e hora em seu código python:eles são sempre horários UTC.
Se você quiser imprimir esses valores em um PDF, use os mesmos métodos que o Django usa para a renderização do template:
from django.utils import timezone
print(timezone.template_localtime(Booking.objects.get(pk=280825).start))
Isso renderiza a data e hora no fuso horário padrão (ou se você
activate()
um fuso horário diferente, no fuso horário atual ). (*) Nota:Por que você não deve dar nenhum significado ao fuso horário salvo em seu banco de dados e apenas pensar nisso como se fosse tudo UTC:Se você executar servidores em vários fusos horários, poderá acabar salvando carimbos de data e hora em diferentes fusos horários . Eles ainda estão todos corretos (timestamps absolutos) e podem ser convertidos para qualquer outro fuso horário. Então, basicamente, o fuso horário usado para salvar não tem sentido.