Тълкувате това погрешно. Базата данни съхранява 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:Ако трябваше да стартирате сървъри в различни часови зони, може всъщност да запазите времеви клейма в различни часови зони . Всички те все още са правилни (абсолютни времеви марки) и могат да бъдат преобразувани във всяка друга часова зона. Така че основно часовата зона, използвана за запис, е безсмислена.