Функция timezone.make_aware
Функция make_aware из модуля django.utils.timezone
применяется для преобразования наивного объекта datetime
в осознанный (timezone-aware). Она принимает наивный datetime
и временную зону, а возвращает осознанный datetime с
привязанной к нему информацией о временной зоне. Если
временная зона не указана явно, используется текущая
активная временная зона.
Функция может принимать необязательный параметр
is_dst, который определяет поведение при переходе
на летнее время. Если передано значение None,
функция попытается автоматически определить правильный
сдвиг, но в неоднозначных случаях может возникнуть ошибка.
Синтаксис
from django.utils import timezone
aware_datetime = timezone.make_aware(naive_datetime, timezone=None, is_dst=None)
Пример . С текущей временной зоной
Давайте создадим наивный datetime и преобразуем его в осознанный с использованием текущей активной временной зоны:
from django.utils import timezone
from datetime import datetime
naive_dt = datetime(2025, 1, 15, 12, 0, 0)
aware_dt = timezone.make_aware(naive_dt)
print(aware_dt)
Результат выполнения кода:
"2025-01-15 12:00:00+03:00"
Пример . С указанием временной зоны
Преобразуем наивный datetime в осознанный с явным указанием временной зоны America/New_York:
from django.utils import timezone
from datetime import datetime
import pytz
naive_dt = datetime(2025, 6, 1, 15, 30, 0)
new_york_tz = pytz.timezone('America/New_York')
aware_dt = timezone.make_aware(naive_dt, new_york_tz)
print(aware_dt)
Результат выполнения кода:
"2025-06-01 15:30:00-04:00"
Пример . С параметром is_dst
В неоднозначные моменты перехода на летнее время параметр
is_dst помогает определить, какой сдвиг использовать.
Значение True означает летнее время, False -
зимнее время:
from django.utils import timezone
from datetime import datetime
import pytz
eastern_tz = pytz.timezone('America/New_York')
ambiguous_dt = datetime(2025, 11, 2, 1, 30, 0)
# Летнее время
aware_dst = timezone.make_aware(ambiguous_dt, eastern_tz, is_dst=True)
print(aware_dst)
# Зимнее время
aware_std = timezone.make_aware(ambiguous_dt, eastern_tz, is_dst=False)
print(aware_std)
Результат выполнения кода:
"2025-11-02 01:30:00-04:00"
"2025-11-02 01:30:00-05:00"
Смотрите также
-
функция
timezone.now,
которая возвращает текущую дату и время с учётом временной зоны -
функция
timezone.localtime,
которая преобразует осознанный datetime в текущую временную зону -
функция
timezone.make_naive,
которая выполняет обратное преобразование - делает datetime наивным -
функция
timezone.is_aware,
которая проверяет, является ли datetime осознанным