Функция timezone.localtime

Функция timezone.localtime применяется к объекту datetime и возвращает новый объект datetime, преобразованный из UTC в текущий активный часовой пояс. Если объект не содержит информации о часовом поясе (наивный), то он считается находящимся в UTC. Функция также принимает необязательный аргумент timezone, позволяющий указать конкретный часовой пояс для преобразования вместо активного по умолчанию.

Синтаксис

pythonfrom django.utils import timezone

timezone.localtime(value, timezone=None)

Параметры функции:

Пример . С активным часовым поясом

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

pythonfrom django.utils import timezone

# Получаем текущее время в UTC
utc_time = timezone.now()
print(utc_time)

# Преобразуем в локальное время
local_time = timezone.localtime(utc_time)
print(local_time)

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

python"2025-01-15 10:30:45.123456+00:00"
"2025-01-15 13:30:45.123456+03:00"

Как видно из примера, время было автоматически скорректировано с учётом разницы в часовых поясах.

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

Преобразуем время в конкретный часовой пояс с помощью параметра timezone:

pythonfrom django.utils import timezone
import pytz

# Получаем текущее время в UTC
utc_time = timezone.now()

# Преобразуем в часовой пояс Америки/Нью-Йорк
new_york_time = timezone.localtime(
  utc_time,
  timezone=pytz.timezone('America/New_York')
)
print(new_york_time)

# Преобразуем в часовой пояс Европы/Лондон
london_time = timezone.localtime(
  utc_time,
  timezone=pytz.timezone('Europe/London')
)
print(london_time)

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

python"2025-01-15 05:30:45.123456-05:00"
"2025-01-15 10:30:45.123456+00:00"

Каждый объект datetime был преобразован с учётом своего часового пояса, что позволяет получить правильное локальное время для разных регионов.

Пример . С наивным datetime объектом

Преобразуем наивный объект datetime в локальный часовой пояс:

pythonfrom django.utils import timezone
from datetime import datetime

# Создаем наивный объект datetime
naive_time = datetime(2025, 1, 15, 10, 30, 45)
print(naive_time)

# Преобразуем в локальное время
local_time = timezone.localtime(naive_time)
print(local_time)

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

python"2025-01-15 10:30:45"
"2025-01-15 13:30:45+03:00"

Наивный объект автоматически считается находящимся в UTC и преобразуется в активный часовой пояс.

Пример . С моделью Django

Используем timezone.localtime для отображения времени создания записей в локальном часовом поясе:

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

# Получаем статью из базы данных
article = Article.objects.first()

# Преобразуем время создания в локальное
local_created = timezone.localtime(article.created_at)
print(f"Article created at: {local_created}")

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

python"Article created at: 2025-01-15 14:30:45+03:00"

Этот подход полезен при отображении дат в пользовательском интерфейсе, так как время будет соответствовать часовому поясу пользователя.

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

  • функция timezone.now,
    которая возвращает текущее время в UTC
  • функция timezone.localdate,
    которая возвращает текущую дату в локальном часовом поясе
  • функция timezone.make_aware,
    которая преобразует наивный datetime в осознанный
  • функция timezone.make_naive,
    которая преобразует осознанный datetime в наивный