Статьи

Учебные материалы по языку Python — от основ до продвинутых тем

date, time, datetime, timedelta

Страница 34 из 34 · 2026-10-26 · 5 мин чтения

Классы модуля

КлассНазначение
dateДата (год, месяц, день)
timeВремя суток
datetimeДата и время
timedeltaИнтервал времени
timezoneФиксированный часовой пояс
tzinfoБазовый класс часовых поясов

Все объекты неизменяемы и хешируемы.

date

from datetime import dated = date(2026, 10, 26)print(d)print(d.year, d.month, d.day)print(date.today())print(date.fromisoformat("2026-01-31"))print(date.fromordinal(1))

Методы и атрибуты date

ЭлементОписание
today()Классовый метод: текущая дата
fromisoformat(s)Классовый метод: из строки YYYY-MM-DD
fromtimestamp(ts)Классовый метод: из метки времени
fromordinal(n)Классовый метод: из порядкового номера
replace(year=, month=, day=)Копия с изменёнными полями
weekday()День недели, понедельник — 0
isoweekday()День недели, понедельник — 1
isocalendar()Кортеж (год, неделя, день) ISO
isoformat()Строка YYYY-MM-DD
strftime(fmt)Форматирование
toordinal()Порядковый номер
timetuple()Структура time.struct_time
year, month, dayПоля
d = date(2026, 10, 26)print(d.weekday())print(d.isoweekday())print(d.isocalendar())print(d.replace(day=1))print(d.strftime("%d.%m.%Y"))print(d.strftime("%A, %B %d"))

time

from datetime import timet = time(14, 30, 15, 500)print(t)print(t.hour, t.minute, t.second, t.microsecond)print(t.isoformat())print(t.replace(hour=0))print(time.fromisoformat("09:30"))print(time(9) < time(18))

Атрибуты: hour, minute, second, microsecond, tzinfo, fold. Методы: isoformat, strftime, replace, fromisoformat, utcoffset, dst, tzname.

datetime

from datetime import datetime, timezonedt = datetime(2026, 10, 26, 14, 30, 0)print(dt)print(datetime.now())print(datetime.now(timezone.utc))print(datetime.fromisoformat("2026-10-26T14:30:00"))print(datetime.strptime("26.10.2026 14:30", "%d.%m.%Y %H:%M"))print(datetime.fromtimestamp(0))print(dt.timestamp())

Метод utcnow() считается устаревшим с Python 3.12, вместо него используйте datetime.now(timezone.utc).

Методы datetime

МетодОписание
now(tz=None)Текущие дата и время
today()То же без часового пояса
fromisoformat(s)Из ISO-строки
fromtimestamp(ts, tz=None)Из метки времени
strptime(s, fmt)Разбор строки по формату
combine(date, time)Из объектов date и time
date(), time(), timetz()Компоненты
replace(...)Копия с изменёнными полями
astimezone(tz)Перевод в другой пояс
timestamp()Метка времени
weekday(), isoweekday(), isocalendar()Дни недели
isoformat(sep="T", timespec="auto")ISO-строка
strftime(fmt)Форматирование
utcoffset(), dst(), tzname()Сведения о поясе
dt = datetime(2026, 10, 26, 14, 30, 45)print(dt.date())print(dt.time())print(dt.isoformat(timespec="minutes"))print(dt.strftime("%Y-%m-%d %H:%M:%S"))print(dt.replace(hour=0, minute=0, second=0))

Коды форматирования

КодЗначение
%YГод, четыре цифры
%yГод, две цифры
%mМесяц, две цифры
%dДень, две цифры
%H, %IЧас (24 и 12 часов)
%MМинуты
%SСекунды
%fМикросекунды
%pAM или PM
%A, %aДень недели полностью и кратко
%B, %bМесяц полностью и кратко
%jДень года
%U, %WНомер недели
%z, %ZСмещение и название пояса

Названия дней и месяцев зависят от локали.

timedelta

from datetime import timedelta, date, datetimedelta = timedelta(days=1, hours=2, minutes=30)print(delta)print(delta.days, delta.seconds, delta.microseconds)print(delta.total_seconds())print(date(2026, 10, 26) + timedelta(days=10))print(datetime(2026, 10, 26) - timedelta(hours=5))print(date(2026, 12, 31) - date(2026, 10, 26))print((date(2026, 12, 31) - date(2026, 10, 26)).days)print(timedelta(hours=1) * 3)print(timedelta(hours=6) / timedelta(hours=2))print(abs(timedelta(days=-1)))

Аргументы: days, seconds, microseconds, milliseconds, minutes, hours, weeks. Хранятся только дни, секунды и микросекунды.

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

Объекты без часового пояса называются наивными, с поясом — осведомлёнными. Складывать и сравнивать наивные и осведомлённые объекты нельзя.

from datetime import datetime, timezone, timedeltautc_now = datetime.now(timezone.utc)print(utc_now)msk = timezone(timedelta(hours=3), "MSK")print(utc_now.astimezone(msk))aware = datetime(2026, 10, 26, 12, 0, tzinfo=timezone.utc)print(aware.isoformat())print(aware.timestamp())

Для регионов с переходом на летнее время используйте модуль zoneinfo:

from zoneinfo import ZoneInfofrom datetime import datetimeberlin = ZoneInfo("Europe/Berlin")tokyo = ZoneInfo("Asia/Tokyo")dt = datetime(2026, 10, 26, 12, 0, tzinfo=berlin)print(dt)print(dt.astimezone(tokyo))

Хорошая практика: хранить и передавать время в UTC, а в локальный пояс переводить только при отображении.

Модуль time

import timeprint(time.time())print(time.perf_counter())print(time.monotonic())time.sleep(0.1)print(time.strftime("%Y-%m-%d", time.localtime(0)))
ФункцияОписание
time()Секунды с 1 января 1970 UTC
perf_counter()Точный таймер для замеров
monotonic()Монотонные часы без скачков
sleep(s)Пауза
localtime, gmtimeРазбор метки времени
strftime, strptimeФорматирование и разбор

Для замеров интервалов используйте perf_counter, а не time.time.

Календарь

import calendarprint(calendar.isleap(2028))print(calendar.monthrange(2026, 2))print(calendar.month_name[10])print(calendar.day_name[0])print(calendar.month(2026, 10))

Задания

  1. Вычислите количество дней до ближайшего Нового года.
  2. Определите возраст человека в годах по дате рождения.
  3. Переведите время встречи из одного часового пояса в несколько других через zoneinfo.
  4. Найдите последнюю пятницу каждого месяца 2026 года.