
Работа с временем в Python обычно решается через модуль datetime, который предоставляет классы date, time и timedelta. Для сложения времени применяют именно timedelta, так как он позволяет добавлять минуты, часы и секунды к объектам даты или времени без ручного пересчёта.
Например, если требуется прибавить 2 часа 30 минут к текущему времени, достаточно создать объект timedelta с соответствующими параметрами и сложить его с результатом datetime.now(). Такой подход исключает ошибки округления и корректно учитывает переход через сутки.
В случаях, когда нужно складывать только объекты time (без даты), рекомендуется сначала преобразовать их в datetime, выполнить вычисления, а затем снова извлечь только часть времени. Это особенно полезно для расписаний, работы с интервалами и автоматизации задач, где важно оперировать часами и минутами без привязки к календарю.
Сложение времени с использованием datetime.timedelta

Класс datetime.timedelta позволяет прибавлять к объекту datetime или time заданный промежуток. Это удобно для расчёта будущих моментов времени или смещения расписаний.
Пример сложения даты и времени на 2 часа 30 минут:
from datetime import datetime, timedelta
start = datetime(2025, 9, 14, 12, 0, 0)
delta = timedelta(hours=2, minutes=30)
result = start + delta
print(result) # 2025-09-14 14:30:00
При сложении учитываются переходы через сутки и месяцы:
start = datetime(2025, 12, 31, 23, 0, 0)
delta = timedelta(hours=3)
result = start + delta
print(result) # 2026-01-01 02:00:00
Объект timedelta поддерживает дни, секунды, микросекунды, а также ключевые аргументы: weeks, days, hours, minutes, seconds, milliseconds, microseconds. Это позволяет задавать любые комбинации временных интервалов:
delta = timedelta(weeks=1, hours=5, minutes=45)
Если нужно только прибавить минуты или секунды к текущему времени, достаточно:
now = datetime.now()
new_time = now + timedelta(minutes=15)
Добавление минут и часов к объекту datetime

Для изменения времени в Python применяется класс timedelta из модуля datetime. Он позволяет прибавлять или вычитать минуты и часы напрямую к объекту datetime.
Пример добавления часов и минут:
from datetime import datetime, timedelta
dt = datetime(2025, 9, 14, 10, 30)
new_time = dt + timedelta(hours=3, minutes=45)
print(new_time) # 2025-09-14 14:15:00
Можно использовать отрицательные значения для вычитания:
dt = datetime(2025, 9, 14, 10, 30)
earlier = dt + timedelta(hours=-2, minutes=-20)
print(earlier) # 2025-09-14 08:10:00
Сравнение основных вариантов:
| Задача | Код | Результат |
|---|---|---|
| Прибавить 1 час | dt + timedelta(hours=1) |
11:30 |
| Прибавить 30 минут | dt + timedelta(minutes=30) |
11:00 |
| Вычесть 90 минут | dt + timedelta(minutes=-90) |
09:00 |
| Сместить на 5 часов 15 минут | dt + timedelta(hours=5, minutes=15) |
15:45 |
Прибавление дней и недель к дате

Для изменения даты удобно использовать класс timedelta из модуля datetime. Он позволяет прибавлять или вычитать дни и недели от заданной даты.
Пример прибавления 5 дней:
from datetime import datetime, timedelta
today = datetime.now()
new_date = today + timedelta(days=5)
print("Текущая дата:", today.strftime("%Y-%m-%d"))
print("Через 5 дней:", new_date.strftime("%Y-%m-%d"))
Для прибавления недель используйте аргумент weeks:
from datetime import datetime, timedelta
today = datetime.now()
future_date = today + timedelta(weeks=2)
print("Текущая дата:", today.strftime("%Y-%m-%d"))
print("Через 2 недели:", future_date.strftime("%Y-%m-%d"))
Можно комбинировать параметры, например timedelta(days=10, weeks=1) создаст смещение на 17 дней. Это полезно при работе с календарными расчетами и планированием событий.
Сложение двух объектов timedelta

Класс datetime.timedelta поддерживает операцию сложения. При этом создаётся новый объект, сумма значений которого равна сумме дней, секунд и микросекунд двух слагаемых.
Пример:
from datetime import timedelta
a = timedelta(days=2, hours=5, minutes=30)
b = timedelta(days=1, hours=4, minutes=45)
result = a + b
print(result) # 3 days, 10:15:00
- Если в сумме получается больше 24 часов, они автоматически преобразуются в дополнительные дни.
- Микросекунды учитываются, при необходимости переводятся в секунды.
- Результат всегда новый объект, исходные значения не изменяются.
Сложение удобно применять при накоплении промежутков времени, например для подсчёта общей продолжительности задач или работы таймеров.
Работа с текущим временем и его изменением

Для получения текущего времени используется модуль datetime. Основной метод:
from datetime import datetime
now = datetime.now()
print(now) # полный объект даты и времени
print(now.time()) # только время
Изменение времени выполняется через timedelta. Этот объект позволяет складывать или вычитать часы, минуты, секунды.
from datetime import timedelta
now = datetime.now()
new_time = now + timedelta(hours=3, minutes=15)
print(new_time)
timedelta(hours=1)– прибавление часа;timedelta(minutes=-30)– вычитание получаса;timedelta(seconds=45)– сдвиг на 45 секунд вперёд.
Если нужно сравнить время:
t1 = datetime.now()
t2 = t1 + timedelta(minutes=10)
if t2 > t1:
print("t2 позже t1")
Для форматирования времени используйте strftime:
print(now.strftime("%H:%M:%S")) # часы:минуты:секунды
- Получите текущее время через
datetime.now(). - Используйте
timedeltaдля точного сдвига. - Сравнивайте объекты
datetimeнапрямую.
Сложение времени, полученного из строкового формата
Для сложения времени, заданного строками, в Python необходимо преобразовать строки в объекты типа datetime или timedelta. Стандартный модуль datetime обеспечивает точные вычисления и работу с различными форматами.
Пример: сложение двух временных значений «02:45:30» и «01:20:15». Сначала строки конвертируем в объекты datetime.timedelta:
from datetime import timedelta
time1 = "02:45:30"
time2 = "01:20:15"
h1, m1, s1 = map(int, time1.split(':'))
h2, m2, s2 = map(int, time2.split(':'))
delta1 = timedelta(hours=h1, minutes=m1, seconds=s1)
delta2 = timedelta(hours=h2, minutes=m2, seconds=s2)
total = delta1 + delta2
print(total)
Результат: 4:05:45. При необходимости его можно вывести в формате HH:MM:SS:
total_seconds = int(total.total_seconds())
hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60
formatted_time = f"{hours:02}:{minutes:02}:{seconds:02}"
print(formatted_time)
Для работы с нестандартными форматами, например «2h45m30s», рекомендуется использовать регулярные выражения для извлечения числовых значений перед преобразованием в timedelta.
Ограничения при сложении времени без даты
В Python объект datetime.time хранит только часы, минуты, секунды и микросекунды, без привязки к календарной дате. Это делает прямое сложение времени невозможным: попытка прибавить два объекта time вызовет ошибку TypeError.
Для операций сложения или вычитания времени необходимо использовать datetime.timedelta совместно с datetime.datetime. Например, чтобы прибавить 2 часа к 15:30:00, нужно создать временной объект с фиктивной датой:
from datetime import datetime, timedelta, time
t = time(15, 30)
dt = datetime.combine(datetime.today(), t)
dt_new = dt + timedelta(hours=2)
t_new = dt_new.time()
Без использования datetime невозможно корректно учитывать перенос через полночь: простое сложение чисел для часов приведет к значениям выше 23, что нарушает формат времени.
При работе только с объектами time рекомендуется конвертировать время в секунды или минуты, выполнять вычисления и затем нормализовать результат с помощью операции взятия по модулю 24 часов:
total_seconds = (t.hour*3600 + t.minute*60 + t.second + 7200) % 86400
hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60
Таким образом, любые вычисления времени без даты требуют явного контроля переполнения и использования дополнительных объектов или арифметики с секундами, чтобы избежать некорректных результатов.
Применение цикла для пошагового увеличения времени
Для поэтапного увеличения времени в Python удобно использовать модуль datetime совместно с циклами. Наиболее часто применяют timedelta для добавления фиксированных интервалов.
Пример: создадим список времени с шагом в 15 минут, начиная с 08:00 и до 12:00.
from datetime import datetime, timedelta
start_time = datetime.strptime("08:00", "%H:%M")
end_time = datetime.strptime("12:00", "%H:%M")
step = timedelta(minutes=15)
current_time = start_time
while current_time <= end_time:
print(current_time.strftime("%H:%M"))
current_time += step
Если требуется генерация фиксированного количества шагов, эффективнее использовать for:
for i in range(10):
print((start_time + i*step).strftime("%H:%M"))
Этот метод удобен при необходимости ограниченного числа итераций без явного сравнения с конечным временем.
Для суммирования более сложных интервалов можно комбинировать часы, минуты и секунды в timedelta, например: timedelta(hours=1, minutes=30, seconds=45). Цикл автоматически учитывает перенос времени через сутки.
