Как в Python прибавить к дате определенный временной интервал?

«Как в Python прибавить к дате определенный временной интервал?» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. datetime.timedelta (стандартная библиотека) Это основной и наиболее распространенный способ. Объект timedelta представляет разницу между двумя датами или моментами времени.

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

    from datetime import datetime, timedelta
    
    # Текущее время
    now = datetime.now()
    print(f"Сейчас: {now}")
    
    # Добавляем 5 часов и 30 минут
    future_time = now + timedelta(hours=5, minutes=30)
    print(f"Через 5.5 часов: {future_time}")
    
    # Отнимаем 2 дня
    past_time = now - timedelta(days=2)
    print(f"2 дня назад: {past_time}")
  2. dateutil.relativedelta (сторонняя библиотека) Более мощный инструмент из библиотеки python-dateutil. Позволяет работать со сложными относительными интервалами, такими как месяцы и годы, корректно обрабатывая разное количество дней в них.

    Причина использования: Необходимость оперировать месяцами или годами, что timedelta делает не так гибко.

    from datetime import date
    from dateutil.relativedelta import relativedelta
    
    today = date.today()
    
    # Через 3 месяца
    future_date = today + relativedelta(months=+3)
    print(f"Через 3 месяца: {future_date}")
  3. pandas.Timedelta (для анализа данных) Если вы работаете в экосистеме pandas, использование его собственных типов данных для времени является естественным и эффективным решением.

    import pandas as pd
    
    now = pd.Timestamp.now()
    future_time = now + pd.Timedelta(hours=3, minutes=15)
    print(f"Pandas Timedelta: {future_time}")

Итог: Для большинства стандартных задач используйте datetime.timedelta. Если нужна работа с месяцами/годами, ваш выбор — dateutil.relativedelta.