Задать вопрос
@DenisProk

Как вывести время в шаблоне Django в соответствии часовым поясом?

В моем проекте есть модель "Procedures", у которой есть поле "application_deadline" с типом DateTimeField. В одной из функции я присваиваю данному полю значение, для примера пусть будет 21.07.2025 11:00. Далее смотрю в db.sqlite3 значение данного поля, все хорошо, оно соответствует. Если я вывожу значение данного поля объекта модели в терминал все так же как в БД. Но вот я хочу вывести эту дату и время в Django шаблоне, а там выводится 21.07.2025 14:00. Понимаю, что проблема с часовым поясом, но не могу разобраться как ее решить, пожалуйста помогите.

# Унаследованная модель в models.py
class Procedures(BaseModel):
    application_deadline = models.DateTimeField(
        blank=True,
        null=True,
    )


# Настройки в settings.py
LANGUAGE_CODE = 'ru-RU'

TIME_ZONE = 'Europe/Moscow'

USE_TZ = True

USE_I18N = True

USE_L10N = True


Отрывок из функции, в которой задается дата и время для поля
date  # это переменная в формате datetime.date()), которая определена ранее в функции

time = datetime.time(11, 00, 0, tzinfo=timezone(timedelta(hours=0)))
datetime = datetime.datetime.combine(date, time)
procedure_model.application_deadline = datetime
procedure_model.save()


Скрин из БД
68666ea983844614893192.png

Отрывок кода для вывода даты и времени в шаблоне Django
<p>
  {{ procedure_data.application_deadline|date:"d.m.Y H:i"|default:"-" }}
</p>


А вот что я получаю в шаблоне
6866720e9a8fe599345381.png

И в админке тоже 14:00 стоит
686675afe22b0565461541.png
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Не работал с джангой, но...
time = datetime.time(11, 00, 0, tzinfo=timezone(timedelta(hours=0)))

Это время в UTC.
А вот что используется при выводе... может, как раз твоё TIME_ZONE = 'Europe/Moscow'?
Ответ написан
@Everything_is_bad
time = datetime.time(11, 00, 0, tzinfo=timezone(timedelta(hours=0)))
datetime = datetime.datetime.combine(date, time)
используй джанговские функции https://docs.djangoproject.com/en/5.2/ref/utils/#m..., а еще лучше почитай офдоки про работу со временем https://docs.djangoproject.com/en/5.2/topics/i18n/...

ЗЫ Ну а главное что в большинстве случае, сервер не знает какой часовой пояс на клиенте, поэтому на нем уже js-ом подправляют с учетом его.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы