Как в 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.

Ответ 18+ 🔞

А, ну ты смотри, какие мы серьёзные с датами возиться собрались! Ну ладно, слушай сюда, раз уж ты такой умный, сейчас я тебе на пальцах объясню, как эту хрень в Python делать, чтобы время прибавлять.

Вот представь, у тебя есть дата, а тебе надо туда, например, пять часов да полчасика впендюрить. Ну, чтобы не вручную считать, блядь, секунды эти, минуты. Для этого есть специальные штуки, они как разницу во времени хранят.

Первый способ — datetime.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}")

Второй способ — dateutil.relativedelta (со стороны) А вот это уже тяжёлая артиллерия, если тебе надо не просто дни, а, например, «через три месяца». Потому что месяцы-то, ёпта, разные бывают! Тут timedelta может обосраться, а эта штука — нет. Но её надо отдельно поставить (pip install python-dateutil).

from datetime import date
from dateutil.relativedelta import relativedelta

today = date.today()

# Вперёд на три месяца, без паники
future_date = today + relativedelta(months=+3)
print(f"Через 3 месяца: {future_date}")

Третий способ — 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}")

Короче, вывод, как всегда, простой:

  • Для 99% дел — хватит timedelta, не выёбывайся.
  • Копал месяцы/годы — бери relativedelta, не ошибёшься.
  • Сидишь в pandas — используй его родной Timedelta, чтобы всё в одной экосистеме было.

Вот и вся магия, ебать мои старые костыли. Не так страшен чёрт, как его малюют.