Функция timezone.make_naive
Функция make_naive применяется к осознанному объекту
datetime и возвращает наивный объект datetime. Преобразование
происходит путём пересчёта времени из указанного часового пояса
в текущий активный часовой пояс Django, после чего информация о
часовом поясе удаляется. Функция особенно полезна при работе с
базами данных, которые хранят даты в наивном формате, или при
выполнении операций сравнения дат.
Синтаксис
from django.utils import timezone
naive_dt = timezone.make_naive(aware_dt, timezone=None)
Функция принимает следующие параметры:
-
'aware_dt'- осознанный объект datetime, который требуется преобразовать в наивный. -
'timezone'- необязательный параметр, задающий часовой пояс для преобразования. По умолчанию используется текущий активный часовой пояс.
Пример . Использование с текущим часовым поясом
Преобразуем осознанное время в наивное с учётом текущего часового пояса:
from 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}")
Результат выполнения кода:
"Осознанное время: 2025-05-15 14:30:00+00:00"
"Наивное время: 2025-05-15 17:30:00"
В примере время было автоматически пересчитано из UTC в текущий часовой пояс (Москва, UTC+3), после чего информация о часовом поясе была удалена.
Пример . С указанием часового пояса
Преобразуем осознанное время в наивное с указанием конкретного часового пояса:
from 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}")
Результат выполнения кода:
"Наивное время в Нью-Йорке: 2025-05-15 10:30:00"
Пример . Использование с моделью Django
Получим осознанное время из модели и преобразуем его в наивное для сравнения:
from 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,
которая возвращает текущий активный часовой пояс