sql >> Databasteknik >  >> RDS >> PostgreSQL

Sluta Django att översätta tider till UTC

Du tolkar detta fel. Databasen lagrar en UTC-tid för det mesta. Om du använder PostgreSQL kan databasen lagra en tid med tidszonsinformation, men av praktiska skäl (*) är det enklast att bara tro att tiden i din db är lagrad som UTC (dvs som en absolut tid som kan konverteras till vilken tid som helst zon) när USE_TZ = True . Den representerar alltid en korrekt tidpunkt för vilken du inte behöver komma ihåg eller anta någon tidszon. Och så vitt jag vet kommer Django alltid att lagra tiden som tidsmedveten i UTC-tidszonen.

Så när du hämtar tidsobjektet med select i psql , du får tillbaka tiden i din maskins lokala tidszon (tidszonen där du kör psql). Om någon i "America/New_York" skulle köra samma urvalsfråga, skulle hon se en -04 tidsstämpel. Hade datumet varit 2019-03-20, skulle du ha sett 2019-03-20 10:50:00+00 för det datumet var Europa/London och UTC desamma.

När du hämtar värdet för ett DateTimeField som en python datetime.datetime objekt, hämtar Django alltid UTC-värdet, eftersom:

Detta gör det lättare att arbeta med dessa datetime-objekt i din pythonkod:De är alltid UTC-tider.

Om du vill skriva ut dessa värden i en PDF, använd samma metoder som Django använder för mallrenderingen:

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

Detta återger datum och tid i standardtidszonen (eller om du activate() en annan tidszon, i aktuell tidszon ).

(*) Notera:Varför du inte ska ge någon mening åt tidszonen som är sparad i din db och bara tänka på det som om det bara är UTC:Om du skulle köra servrar i olika tidszoner kan du faktiskt sluta spara tidsstämplar i olika tidszoner . De är fortfarande alla korrekta (absoluta tidsstämplar) och kan konverteras till vilken annan tidszon som helst. Så i princip är tidszonen som används för att spara meningslös.



  1. mysql_fetch_array while loop. Hur fungerar det?

  2. Mysql, Kontrollera fältvärdesändring?

  3. Varför får jag MySQL-fel #1312 när jag använder en enkel lagrad procedur?

  4. Hur man använder Import/Export Wizard i SQL Server - SQL Server / TSQL självstudie del 104