Почему моя дата в python неправильная после формирования с помощью timedelta?

Я использую Django и у меня возникла проблема с датой, которую мне нужно вычислить. Переменная data > test должна быть 17:00, а не 15:00. Почему это происходит, как только я форматирую дату?

Мой часовой пояс - Европа/Берлин. Изменение часового пояса не влияет на время печати в тесте. Оно всегда равно -2h

def date(req):
    now = datetime.datetime.now()
    model = MyModel.objects.filter(date__gt=now).first()
    next = model.date
    future = datetime.timedelta(hours=float(model.future)) #model.future = 1.5
    open = next-future
    date = next.strftime('%Y/%m/%d')
    data = {
        'next': next,
        'date': date,
        'time': open,
        'test': open.strftime('%Y/%m/%d %H:%M:%S')
    }

Что я получаю:

next: 20. November 2021 18:30
date: 2021/11/20
time: 20. November 2021 17:00
test: 2021/11/20 15:00:00

https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/#naive-and-aware-datetime-objects

Вы должны использовать:

from django.utils import timezone
now = timezone.now()

Datetime не учитывает часовой пояс.

Вы вырезаете информацию о часовом поясе (смещение +02:00) с помощью .strftime(). Вам нужно включить ее в %z.

В случае, если вы хотите преобразовать его в строку времени с уже добавленным смещением.

open.astimezone(timezone.utc).strftime('%Y-%m-%d %H:%M:%S.%f')

Это работает для меня.

from django.utils import timezone

def date(req):
    now = timezone.now()
    model = MyModel.objects.filter(date__gt=now).first()
    next = model.date
    future = timezone.timedelta(hours=float(model.future)) #model.future = 1.5
    open = next-future
    date = timezone.localtime(open)
    data = {
        'next': date.strftime('%Y/%m/%d %H:%M:%S'),
        'date': date.strftime('%Y/%m/%d'),
        'time': date.strftime('%H:%M:%S'),
    }
Вернуться на верх