Функция timezone.localtime
Функция timezone.localtime применяется к объекту datetime
и возвращает новый объект datetime, преобразованный из UTC
в текущий активный часовой пояс. Если объект не содержит
информации о часовом поясе (наивный), то он считается
находящимся в UTC. Функция также принимает необязательный
аргумент timezone, позволяющий указать конкретный часовой
пояс для преобразования вместо активного по умолчанию.
Синтаксис
from django.utils import timezone
timezone.localtime(value, timezone=None)
Параметры функции:
- ⁅b⁆value⁅/b⁆ - объект datetime, который необходимо преобразовать в локальный часовой пояс.
- ⁅b⁆timezone⁅/b⁆ - необязательный параметр, указывающий конкретный часовой пояс для преобразования.
Пример . С активным часовым поясом
Преобразуем текущее время из UTC в активный часовой пояс:
from django.utils import timezone
# Получаем текущее время в UTC
utc_time = timezone.now()
print(utc_time)
# Преобразуем в локальное время
local_time = timezone.localtime(utc_time)
print(local_time)
Результат выполнения кода:
"2025-01-15 10:30:45.123456+00:00"
"2025-01-15 13:30:45.123456+03:00"
Как видно из примера, время было автоматически скорректировано с учётом разницы в часовых поясах.
Пример . С указанием конкретного часового пояса
Преобразуем время в конкретный часовой пояс с помощью
параметра timezone:
from 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)
Результат выполнения кода:
"2025-01-15 05:30:45.123456-05:00"
"2025-01-15 10:30:45.123456+00:00"
Каждый объект datetime был преобразован с учётом своего часового пояса, что позволяет получить правильное локальное время для разных регионов.
Пример . С наивным datetime объектом
Преобразуем наивный объект datetime в локальный часовой пояс:
from 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)
Результат выполнения кода:
"2025-01-15 10:30:45"
"2025-01-15 13:30:45+03:00"
Наивный объект автоматически считается находящимся в UTC и преобразуется в активный часовой пояс.
Пример . С моделью Django
Используем timezone.localtime для отображения
времени создания записей в локальном часовом поясе:
from 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}")
Результат выполнения кода:
"Article created at: 2025-01-15 14:30:45+03:00"
Этот подход полезен при отображении дат в пользовательском интерфейсе, так как время будет соответствовать часовому поясу пользователя.
Смотрите также
-
функция
timezone.now,
которая возвращает текущее время в UTC -
функция
timezone.localdate,
которая возвращает текущую дату в локальном часовом поясе -
функция
timezone.make_aware,
которая преобразует наивный datetime в осознанный -
функция
timezone.make_naive,
которая преобразует осознанный datetime в наивный