sql >> Databáze >  >> RDS >> PostgreSQL

Zastavte Django překládání časů do UTC

To si špatně vykládáš. Databáze většinu času ukládá čas UTC. Pokud používáte PostgreSQL, může databáze ukládat čas s informacemi o časovém pásmu, ale pro praktické účely (*) je nejjednodušší si myslet, že čas ve vaší databázi je uložen jako UTC (tj. jako absolutní čas, který lze převést na libovolný čas zóna), když USE_TZ = True . Vždy představuje správný bod v čase, pro který si nemusíte pamatovat ani předpokládat žádné časové pásmo. A pokud vím, Django bude vždy ukládat čas v časovém pásmu UTC.

Když tedy načítáte objekt času pomocí select v psql , získáváte zpět čas v místním časovém pásmu vašeho počítače (časové pásmo, ve kterém používáte psql). Pokud by někdo v "America/New_York" spustil stejný výběrový dotaz, vidělo by časové razítko -04. Kdyby bylo datum 20.03.2019, viděli byste 2019-03-20 10:50:00+00 protože k tomuto datu byly Evropa/Londýn a UTC stejné.

Při načítání hodnoty DateTimeField jako python datetime.datetime objekt, Django vždy načte hodnotu UTC, protože:

To usnadňuje práci s těmito objekty datetime v kódu pythonu:Jsou to vždy časy UTC.

Pokud chcete tyto hodnoty vytisknout v PDF, použijte stejné metody, jaké používá Django pro vykreslování šablony:

from django.utils import timezone
print(timezone.template_localtime(Booking.objects.get(pk=280825).start))

Toto vykreslí datum a čas ve výchozím časovém pásmu (nebo pokud activate() jiné časové pásmo v aktuálním časovém pásmu ).

(*) Poznámka:Proč byste neměli dávat žádný význam časovému pásmu uloženému ve vaší databázi a jen o něm přemýšlet, jako by to bylo celé UTC:Pokud byste provozovali servery v různých časových pásmech, mohli byste ve skutečnosti skončit ukládáním časových razítek v různých časových pásmech . Všechny jsou stále správné (absolutní časová razítka) a lze je převést na jakékoli jiné časové pásmo. Časové pásmo použité pro ukládání tedy v zásadě postrádá smysl.



  1. Jak mohu získat entitu z reference Doctrine Fixture?

  2. Oracle Cloud Breakdown – náklady na hostování databáze na OCI

  3. Jak přežít audit Oracle

  4. Django + PostgreSQL:vytvoření databáze (jaká oprávnění udělit)