Функция timezone.make_naive

Функция make_naive применяется к осознанному объекту datetime и возвращает наивный объект datetime. Преобразование происходит путём пересчёта времени из указанного часового пояса в текущий активный часовой пояс Django, после чего информация о часовом поясе удаляется. Функция особенно полезна при работе с базами данных, которые хранят даты в наивном формате, или при выполнении операций сравнения дат.

Синтаксис

pythonfrom django.utils import timezone

naive_dt = timezone.make_naive(aware_dt, timezone=None)

Функция принимает следующие параметры:

Пример . Использование с текущим часовым поясом

Преобразуем осознанное время в наивное с учётом текущего часового пояса:

pythonfrom django.utils import timezone
from datetime import datetime

# Создаём осознанный объект с часовым поясом UTC
aware_dt = datetime(2025, 5, 15, 14, 30, 0, tzinfo=timezone.utc)
print(f"Осознанное время: {aware_dt}")

# Преобразуем в наивное время
naive_dt = timezone.make_naive(aware_dt)
print(f"Наивное время: {naive_dt}")

Результат выполнения кода:

python"Осознанное время: 2025-05-15 14:30:00+00:00"
"Наивное время: 2025-05-15 17:30:00"

В примере время было автоматически пересчитано из UTC в текущий часовой пояс (Москва, UTC+3), после чего информация о часовом поясе была удалена.

Пример . С указанием часового пояса

Преобразуем осознанное время в наивное с указанием конкретного часового пояса:

pythonfrom django.utils import timezone
from datetime import datetime
import pytz

# Создаём осознанный объект
aware_dt = datetime(2025, 5, 15, 14, 30, 0, tzinfo=timezone.utc)

# Задаём часовой пояс Нью-Йорка
new_york_tz = pytz.timezone('America/New_York')
naive_dt = timezone.make_naive(aware_dt, timezone=new_york_tz)
print(f"Наивное время в Нью-Йорке: {naive_dt}")

Результат выполнения кода:

python"Наивное время в Нью-Йорке: 2025-05-15 10:30:00"

Пример . Использование с моделью Django

Получим осознанное время из модели и преобразуем его в наивное для сравнения:

pythonfrom django.utils import timezone
from myapp.models import Article
from datetime import timedelta

# Получаем осознанное время из модели
article = Article.objects.get(id=1)
aware_pub_date = article.published_at

# Преобразуем в наивное для выполнения операции
naive_pub_date = timezone.make_naive(aware_pub_date)
naive_now = timezone.make_naive(timezone.now())

# Сравниваем наивные объекты
if naive_pub_date > naive_now - timedelta(days=7):
  print("Статья опубликована на этой неделе")
else:
  print("Статья опубликована более недели назад")

Смотрите также

  • функция make_aware,
    которая выполняет обратное преобразование - из наивного в осознанное время
  • функция is_naive,
    которая проверяет, является ли объект datetime наивным
  • функция is_aware,
    которая проверяет, является ли объект datetime осознанным
  • функция get_current_timezone,
    которая возвращает текущий активный часовой пояс