0Pricing
Python Academy · Урок

Часовые пояса с zoneinfo

Работайте с объектами datetime, учитывающими часовой пояс

«Часовые пояса с zoneinfo» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Наивные и часовые объекты даты и времени

Наивный объект даты и времени не содержит сведений о часовом поясе — он просто говорит «2 часа дня», но не уточняет, о каких именно 2 часах дня идёт речь. Часовой объект даты и времени содержит часовой пояс и поэтому однозначно задаёт момент времени в любой точке мира.

Часовые объекты даты и времени предотвращают ошибки, когда пользователи находятся в разных регионах.

from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)

Импорт zoneinfo

В Python 3.9 и более поздних версиях zoneinfo входит в стандартную библиотеку. Импортируйте ZoneInfo и передайте название часового пояса IANA, например 'Europe/Istanbul' или 'America/New_York'.

from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)

Создание часового объекта даты и времени

При создании объекта даты и времени передайте tzinfo=ZoneInfo(...), чтобы сделать его часовым. Теперь объект точно знает, к какому региону он относится.

from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)

UTC как опорная точка

UTC — универсальная точка отсчёта. Используйте datetime.now(ZoneInfo('UTC')), чтобы получить текущее время UTC с часовым поясом. Хранить время в UTC — лучшая практика.

from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)

Преобразование между часовыми поясами

.astimezone(tz) преобразует часовой объект даты и времени в другой часовой пояс, изменяя показания часов так, чтобы они по-прежнему обозначали тот же момент.

from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)

Один момент, разные показания часов

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

from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)

Чтение смещения относительно UTC

Метод .utcoffset() возвращает timedelta, показывающий, насколько данный часовой пояс в этот момент отличается от UTC, включая поправку на летнее время.

from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())

Переход на летнее время обрабатывается автоматически

zoneinfo использует системную базу данных часовых поясов, поэтому знает, когда начинается и заканчивается переход на летнее время. Один и тот же часовой пояс может иметь разные смещения в течение года.

from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())

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

Если наивный объект даты и времени обозначает известное местное время, добавьте часовой пояс с помощью .replace(tzinfo=...). Это помечает объект, не изменяя показания часов.

from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)

Не смешивайте наивные и часовые объекты

Нельзя вычитать наивный объект даты и времени из часового или сравнивать их — Python вызывает исключение TypeError. Следите, чтобы во всей программе объекты даты и времени были согласованы.

from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
    print(aware - naive)
except TypeError as e:
    print('Error:', e)

Форматирование с часовым поясом

Код %Z выводит название часового пояса, а %z — числовое смещение при форматировании часового объекта даты и времени.

from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))

Быстрая проверка

В чём состоит ключевое различие между наивным и часовым объектом даты и времени?

Повторение: часовые пояса с zoneinfo

Итоги:

  • Наивные объекты даты и времени не содержат сведений о часовом поясе, а часовые содержат tzinfo.
  • Используйте ZoneInfo('Region/City') из модуля zoneinfo.
  • .astimezone() преобразует часовой объект даты и времени в другой часовой пояс.
  • zoneinfo автоматически обрабатывает переход на летнее время; никогда не смешивайте наивные и часовые объекты даты и времени.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))

Часто задаваемые вопросы

Урок «Часовые пояса с zoneinfo» бесплатный?

Да — полный текст урока «Часовые пояса с zoneinfo» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Часовые пояса с zoneinfo»?

Работайте с объектами datetime, учитывающими часовой пояс Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Часовые пояса с zoneinfo»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. date, time, datetime
  2. Timedelta и арифметика
  3. Форматирование и разбор
  4. Часовые пояса с zoneinfo
← Назад к Python Academy