Классы модуля
| Класс | Назначение |
|---|---|
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 | Микросекунды |
%p | AM или 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))Задания
- Вычислите количество дней до ближайшего Нового года.
- Определите возраст человека в годах по дате рождения.
- Переведите время встречи из одного часового пояса в несколько других через
zoneinfo. - Найдите последнюю пятницу каждого месяца 2026 года.
