Почему смещение часовых поясов в django отличается?
Django 3.2.10, Python 3.9
settings.py
TIME_ZONE = 'Europe/Moscow'
script.py
from django.utils import timezone
tzinfo = timezone.localtime().tzinfo # <class 'pytz.tzfile.Europe/Moscow'>
tz = timezone.get_current_timezone() # <class 'pytz.tzfile.Europe/Moscow'>
dtz = timezone.get_default_timezone() # <class 'pytz.tzfile.Europe/Moscow'>
datetime_object = timezone.now()
print(datetime_object) # 2022-03-29 03:34:42.244830+00:00
print(datetime_object.replace(tzinfo=tzinfo)) # 2022-03-29 03:34:42.244830+03:00
print(datetime_object.replace(tzinfo=tz)) # 2022-03-29 03:34:42.244830+02:30
print(datetime_object.replace(tzinfo=dtz)) # 2022-03-29 03:34:42.244830+02:30
+0230 не +0300, а правильное смещение для этого часового пояса - +0300.
Использование tzinfo при построении временных интервалов с учетом временных зон является (как я слышал) плохой практикой и может привести к ошибкам.
With
`TIME_ZONE = 'Europe/Moscow'
вам следует использовать make_aware:
from django.utils import timezone
from datetime import datetime, time
local_now = timezone.localtime()
time_on_the_clock = time(5, 2)
timezone_aware_time = timezone.make_aware(datetime.combine(local_now, time_on_the_clock))
print(timezone_aware_time)
или используя pytz:
from datetime import datetime
from pytz import timezone
datetime_object = datetime.now()
moscow_time = timezone('Europe/Moscow').localize(datetime_object, is_dst=None)
print(moscow_time)