В чем разница между часовым поясом Django и встроенным?

Я только что заметил это:

>>> import datetime
>>> from django.utils import timezone

>>> (datetime.datetime.now(tz=datetime.timezone.utc) - timezone.now()).microseconds
999989

>>> (datetime.datetime.now(tz=datetime.timezone.utc) - timezone.now()).seconds
86399

>>> 24*60*60
86400

>>> (datetime.datetime.now(tz=datetime.timezone.utc) - timezone.now()).days
-1

>>> timezone.now()
datetime.datetime(2022, 11, 17, 13, 1, 36, 913132, tzinfo=<UTC>)

>>> datetime.datetime.now(tz=datetime.timezone.utc)
datetime.datetime(2022, 11, 17, 13, 1, 41, 913958, tzinfo=datetime.timezone.utc)

Чем отличаются оба варианта получения текущего времени с учетом "часового пояса" UTC? Почему разница составляет положительное число секунд, но точно отрицательное - один день?

Можно ли заменить timezone.now() на datetime.datetime.now(tz=datetime.timezone.utc)?

Второе значение в вашем вычитании создается через микросекунду или около того после первого значения. Таким образом, это более поздняя точка во времени. Вы вычитаете более поздний момент времени из более раннего момента времени. Получаем отрицательную дельту:

>>> datetime.datetime.now(tz=datetime.timezone.utc) - timezone.now()
datetime.timedelta(days=-1, seconds=86399, microseconds=999981)

Если вы смотрите только на дневную или микросекундную часть, это выглядит как огромная разница. Но это просто способ, которым timedelta представляет долю секунды в прошлом . Это минус один день плюс 86399 секунд и 999981 мс. См. объект timedelta в Python с отрицательными значениями.

Вернуться на верх