PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Спрете Django да превежда времената в UTC

Тълкувате това погрешно. Базата данни съхранява UTC време през повечето време. Ако използвате PostgreSQL, базата данни може да съхранява час с информация за часовата зона, но за практически цели (*) е най-лесно просто да мислите, че часът във вашата база данни се съхранява като UTC (т.е. като абсолютно време, което може да бъде преобразувано във всяко време зона), когато USE_TZ = True . Той винаги представлява правилна точка във времето, за която не е необходимо да помните или предполагате някаква часова зона. И доколкото знам, Django винаги ще съхранява часа като съобразен с времето в UTC часова зона.

Така че, когато извличате времевия обект с помощта на select в psql , вие получавате обратно времето в местната часова зона на вашата машина (часовата зона, в която изпълнявате psql). Ако някой в ​​„America/New_York“ изпълни същата заявка за избор, той ще види времево клеймо -04. Ако датата беше 2019-03-20, щеше да видиш 2019-03-20 10:50:00+00 защото на тази дата Европа/Лондон и UTC бяха едни и същи.

При извличане на стойността на DateTimeField като python datetime.datetime обект, Django винаги извлича UTC стойността, защото:

Това улеснява работата с тези обекти за дата и час във вашия код на Python:Те винаги са UTC времена.

Ако искате да отпечатате тези стойности в PDF, използвайте същите методи, които Django използва за изобразяване на шаблона:

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

Това изобразява датата и часа в часова зона по подразбиране (или ако activate() различна часова зона, в текущата часова зона ).

(*) Забележка:Защо не трябва да придавате никакво значение на часовата зона, записана във вашата база данни, а просто да мислите за това, сякаш всичко е UTC:Ако трябваше да стартирате сървъри в различни часови зони, може всъщност да запазите времеви клейма в различни часови зони . Всички те все още са правилни (абсолютни времеви марки) и могат да бъдат преобразувани във всяка друга часова зона. Така че основно часовата зона, използвана за запис, е безсмислена.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Когато стартирам тестови случаи, получавам тази грешка:psycopg2.OperationalError:cursor _django_curs_140351416325888_23 не съществува

  2. Грешка на pgAdmin - релация [име на функция/Изгледи/Тригерни функции] не съществува

  3. процентили от данни на хистограмата

  4. Как да излезете от помощната програма за командния ред на PostgreSQLs (psql)

  5. Изхвърляне и възстановяване на PostgreSQL в различна часова зона