📝 Django

Таймзоны в Django

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
65
🌿
Уровень
Средний
🐦 💼 ✈️

Django хранит все DateTimeField в UTC при USE_TZ=True. Конвертация в локальное время происходит при отображении.

Настройка

# settings.py
USE_TZ = True                    # включить поддержку таймзон (рекомендуется)
TIME_ZONE = 'Europe/Moscow'      # серверная таймзона

Aware vs Naive datetime

from django.utils import timezone
from datetime import datetime

# Aware — datetime с таймзоной (правильно при USE_TZ=True)
now = timezone.now()  # UTC datetime с tzinfo

# Naive — без таймзоны (опасно!)
naive = datetime.now()  # локальное время без tzinfo

Работа с датами

from django.utils import timezone

# Текущее время (UTC)
now = timezone.now()

# Текущая дата в локальной таймзоне
today = timezone.localdate()

# Перевод в локальное время
local_now = timezone.localtime(now)

# Конвертация aware datetime
from django.utils.timezone import make_aware
import pytz

moscow = pytz.timezone('Europe/Moscow')
aware = make_aware(datetime(2024, 1, 15, 12, 0), moscow)

Хранение в БД

Django хранит все DateTimeField в UTC при USE_TZ=True. Конвертация в локальное время происходит при отображении.

В шаблоне

{# Автоматически конвертирует в локальную таймзону #}
{{ task.created_at|date:"d.m.Y H:i" }}

{# Принудительно задать таймзону в шаблоне #}
{% load tz %}
{% timezone "Europe/Moscow" %}
  {{ task.created_at }}
{% endtimezone %}

Переключение таймзоны для пользователя

from django.utils import timezone

def set_timezone(request):
    if request.method == 'POST':
        tz = request.POST.get('timezone')
        request.session['django_timezone'] = tz
    return redirect('/')
# middleware
class TimezoneMiddleware:
    def __call__(self, request):
        tzname = request.session.get('django_timezone')
        if tzname:
            timezone.activate(pytz.timezone(tzname))
        else:
            timezone.deactivate()
        return self.get_response(request)

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 134
📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 100
📝

RAG: чат с документами через векторный поиск

RAG (Retrieval-Augmented Generation) — паттерн для работы с собственными документами. Вместо того чтобы переобучать модель,...

📅 30.06.2026 👁️ 93

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!