Функция timezone.make_aware

Функция make_aware из модуля django.utils.timezone применяется для преобразования наивного объекта datetime в осознанный (timezone-aware). Она принимает наивный datetime и временную зону, а возвращает осознанный datetime с привязанной к нему информацией о временной зоне. Если временная зона не указана явно, используется текущая активная временная зона.

Функция может принимать необязательный параметр is_dst, который определяет поведение при переходе на летнее время. Если передано значение None, функция попытается автоматически определить правильный сдвиг, но в неоднозначных случаях может возникнуть ошибка.

Синтаксис

pythonfrom django.utils import timezone

aware_datetime = timezone.make_aware(naive_datetime, timezone=None, is_dst=None)

Пример . С текущей временной зоной

Давайте создадим наивный datetime и преобразуем его в осознанный с использованием текущей активной временной зоны:

pythonfrom 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)

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

python"2025-01-15 12:00:00+03:00"

Пример . С указанием временной зоны

Преобразуем наивный datetime в осознанный с явным указанием временной зоны America/New_York:

pythonfrom 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)

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

python"2025-06-01 15:30:00-04:00"

Пример . С параметром is_dst

В неоднозначные моменты перехода на летнее время параметр is_dst помогает определить, какой сдвиг использовать. Значение True означает летнее время, False - зимнее время:

pythonfrom 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)

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

python"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 осознанным