Статья

Python: работа с датой и временем

5 сентября 2026~8 минут10–11 класс

Пять минут на эту статью — и «Python: работа с датой и временем» станет понятнее. Внутри: теория без воды, пример, разбор задания и чек-лист самопроверки.

Зачем в Python нужны дата и время

Дата и время встречаются в школьных проектах, олимпиадных задачах и экзаменационных программах: нужно узнать день недели, посчитать разницу между событиями или вывести дату в понятном виде. Ошибка в одном символе часто меняет результат: 03.04 может означать 3 апреля или 4 марта. В Python для таких задач есть модуль datetime. Он помогает не считать дни вручную, учитывать длину месяцев и удобно сравнивать моменты времени.

Главная идея проста: дату, время и их сочетание лучше хранить не как обычную строку, а как специальный объект. Тогда Python сможет выполнять с ними арифметические действия и проверки.

from datetime import date, datetime, time, timedelta

\( today = date.today() \)
print(today)

Функция date.today() возвращает сегодняшнюю дату. Если нужно получить текущие дату и время, используют datetime.now(). А для отдельного времени создают объект time.

Три основных объекта

Объект date содержит год, месяц и день. Его удобно применять, когда часы и минуты не важны. Объект time хранит часы, минуты, секунды и микросекунды. Объект datetime объединяет дату и время.

\( birthday = date(2010, 9, 18) \)
\( lesson = time(14, 30) \)
\( meeting = datetime(2025, 9, 18, 14, 30) \)

Нумерация месяцев начинается с единицы: январь — 1, декабрь — 12. Это отличается от индексов списков, где отсчёт начинается с нуля. У объекта даты можно получить отдельные части через свойства year, month и day.

print(birthday.year)
print(birthday.month)
print(birthday.day)

Создавая дату из данных пользователя, проверяй их заранее. Например, месяца 13 не существует, поэтому Python сообщит об ошибке ValueError.

Совет репетитора

В задачах сначала выпиши, что именно хранится: только день, только время или оба значения. Такой короткий шаг помогает выбрать правильный тип и не запутаться в методах.

Разность дат и промежутки времени

Для прибавления или вычитания дней применяют объект timedelta. Он может хранить дни, секунды, недели и другие единицы. Результат операции с двумя датами тоже будет промежутком времени — объектом timedelta.

\( start = date(2025, 5, 20) \)
\( end = date(2025, 6, 3) \)
\( difference = end - start \)
print(difference.days)
\( print(start + timedelta(days=7)) \)

В примере разность равна 14 дням, а прибавление недели переносит дату на 27 мая. Не нужно вручную учитывать, сколько дней в каждом месяце: модуль сделает это сам.

Для сравнения даты используют обычные операторы: <, >, ==. Дату можно проверить условием, например определить, наступил ли срок сдачи проекта. Если важны часы и минуты, вычитай объекты datetime, а не отдельные строки.

Бесплатно потренировать такие операции можно в личном кабинете с заданиями: после решения сразу легче заметить, где перепутаны дата и длительность.

Форматирование и чтение строк

Пользователь обычно видит дату в виде строки, например 18.09.2025, но Python не воспринимает её автоматически как объект даты. Для преобразования используют strptime, а для обратного вывода — strftime. В шаблоне указывают специальные обозначения.

ОбозначениеЧто означаетПример
%dдень с двумя цифрами18
%mномер месяца09
%Yгод из четырёх цифр2025
%H:%Mчасы и минуты14:30

text = "18.09.2025"
day = datetime.strptime(text, "%d.%m.%Y").date()
print(day.strftime("%Y-%m-%d"))

Важно: шаблон должен точно соответствовать строке. Если в тексте стоит дефис, а в шаблоне точка, преобразование не сработает.

Типичные ошибки в задачах

Первая ошибка — сравнивать даты как строки. Иногда строковое сравнение случайно даёт верный результат, если используется формат «год-месяц-день», но для записи «день.месяц.год» это ненадёжно. Сначала преобразуй строки в date или datetime.

Вторая ошибка — забывать скобки у функций. date.today означает ссылку на функцию, а date.today() действительно вызывает её и возвращает дату.

Третья ошибка — путать количество дней и номер дня недели. Свойство day возвращает число месяца, а метод weekday() возвращает номер дня недели: понедельник имеет индекс 0, воскресенье — 6.

\( d = date(2025, 9, 18) \)
print(d.day)
print(d.weekday())

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

Ловушка

Не прибавляй к дате число напрямую: выражение date(2025, 1, 1) + 5 вызовет ошибку. Используй timedelta(days=5), потому что Python должен понимать единицу измерения.

Что запомнить

Для календарной даты используй date, для часов — time, для даты вместе со временем — datetime. Чтобы прибавить или вычесть промежуток, применяй timedelta. Разность двух дат даёт число дней через свойство days. Строки преобразуются методом strptime, а готовые объекты выводятся в нужном виде через strftime.

Перед решением задачи определи три вещи: какие данные даны, в каком они формате и что требуется получить — дату, время или промежуток. Затем проверь границы: конец месяца, новый год и правильность шаблона.

Следующий шаг — зарегистрируйся и реши 5 заданий бесплатно в личном кабинете. Практика покажет, где именно возникает ошибка: при создании объекта, вычислении разности или форматировании.

Как закрепить тему после разбора?

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

Чем отличаются date и datetime?

date хранит только год, месяц и день, а datetime дополнительно содержит часы, минуты и секунды.

Как узнать день недели?

Вызови метод weekday(). Он возвращает число от 0 для понедельника до 6 для воскресенья.

Можно ли складывать две даты?

Нет. Две даты можно сравнивать и вычитать. Для прибавления к дате используй timedelta, который задаёт длительность.

Не оставляйте тему «прочитанной»

Понимание — половина дела. Вторая — практика с обратной связью: личный кабинет Просто Урок покажет, где вы ошибаетесь, и подтянет слабые места.

Важно. Материалы сайта носят информационно-образовательный характер и не являются публичной офертой (ст. 437 ГК РФ), индивидуальной консультацией или руководством к действию. Мы аккуратно работаем с фактами, но не гарантируем полную точность и актуальность: структура и правила экзаменов могут меняться — сверяйтесь с официальными источниками (ФИПИ, действующие кодификаторы и нормативные акты РФ). Администрация сайта не несёт ответственности за возможные неточности и за решения, принятые на основе материалов. Заметили неточность — напишите нам, мы исправим.