sql >> Database teknologi >  >> RDS >> PostgreSQL

Stop Django med at oversætte tider til UTC

Du tolker det forkert. Databasen gemmer en UTC-tid det meste af tiden. Hvis du bruger PostgreSQL, kan databasen gemme et tidspunkt med tidszoneinfo, men af ​​praktiske årsager (*) er det nemmest bare at tro, at tiden i din db er gemt som UTC (dvs. som et absolut tidspunkt, der kan konverteres til et hvilket som helst tidspunkt) zone), når USE_TZ = True . Det repræsenterer altid et korrekt tidspunkt, for hvilket du ikke behøver at huske eller antage nogen tidszone. Og så vidt jeg ved, vil Django altid gemme tiden som tidsbevidst i UTC-tidszonen.

Så når du henter tidsobjektet ved hjælp af select i psql , får du tiden tilbage i maskinens lokale tidszone (den tidszone, hvor du kører psql). Hvis nogen i "America/New_York" ville køre den samme udvalgte forespørgsel, ville hun se et -04 tidsstempel. Havde datoen været 2019-03-20, ville du have set 2019-03-20 10:50:00+00 fordi på den dato var Europa/London og UTC de samme.

Når du henter værdien af ​​et DateTimeField som en python datetime.datetime objekt, henter Django altid UTC-værdien, fordi:

Dette gør det nemmere at arbejde med disse datetime-objekter i din python-kode:De er altid UTC-tider.

Hvis du vil udskrive disse værdier i en PDF, skal du bruge de samme metoder, som Django bruger til skabelongengivelsen:

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

Dette gengiver datetime i standardtidszonen (eller hvis du activate() en anden tidszone i den aktuelle tidszone ).

(*) Bemærk:Hvorfor du ikke skal give nogen mening til den tidszone, der er gemt i din db og bare tænke på det, som om det hele er UTC:Hvis du skulle køre servere i forskellige tidszoner, kan du faktisk ende med at gemme tidsstempler i forskellige tidszoner . De er stadig alle korrekte (absolutte tidsstempler) og kan konverteres til enhver anden tidszone. Så dybest set er den tidszone, der bruges til at gemme, meningsløs.



  1. Skift gennem udklipsholderring i SQL Server Management Studio (SSMS) - SQL Server / TSQL vejledning del 8

  2. Opret og konfigurer Oracle Linked Server i SQL Server

  3. Top 10 ofte stillede spørgsmål om SQL Server Performance Monitoring

  4. Node.js MySQL-modul - smid fejl; // Genkast ikke-MySQL-fejl;