from dateutil.relativedelta import relativedelta
    
    dt1 = datetime(2023, 1, 1, 10, 0, 0)
    dt2 = datetime(2023, 1, 10, 12, 30, 0)
    
    rd = relativedelta(dt2, dt1)
    
    print(f"Разница: {rd.days} дней, {rd.hours} часов, {rd.minutes} минут")
  
    import pandas as pd
    ts1 = pd.Timestamp('2023-01-01 10:00:00')
    ts2 = pd.Timestamp('2023-01-10 12:30:00')
    # Например, вычисление разницы в рабочих днях (без выходных)
    workday_count = len(pd.bdate_range(ts1, ts2))
    print(f"Количество рабочих дней: {workday_count}")
  Вопрос: Как вычислить разницу между временными метками с учетом нестандартных временных интервалов?
Ответ: Вычисление разницы между временными метками, особенно при учете нестандартных интервалов (например, рабочие дни, определенные часы работы, исключая праздники), требует более сложного подхода, чем простое вычитание.
Основные стратегии и инструменты:
datetime и timedelta: Для базовых операций, таких как вычитание дат и времен, datetime и timedelta из стандартной библиотеки Python вполне подходят.  Например:
      
from datetime import datetime, timedelta
start_time = datetime(2023, 10, 26, 9, 0, 0)
end_time = datetime(2023, 10, 26, 17, 0, 0)
difference = end_time - start_time  # timedelta object
print(difference)  # Выведет: 8:00:00
print(difference.total_seconds()) # Выведет разницу в секундах
      dateutil: dateutil расширяет возможности datetime и предоставляет парсеры дат, относительные дельты времени (relativedelta), которые могут быть полезны для более сложных операций, например добавления месяцев или лет.
      
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_time = datetime(2023, 10, 26)
end_time = datetime(2023, 11, 26)
difference = relativedelta(end_time, start_time)
print(difference.months)  # Выведет: 1
      pandas:  pandas предлагает мощные инструменты для работы с временными рядами, включая Timedelta, Timestamp и DateOffset.  Особенно полезна для операций с данными, которые требуют анализа временных интервалов на основе определенных правил.
          
import pandas as pd
start_time = pd.Timestamp('2023-10-26')
end_time = pd.Timestamp('2023-10-28')
difference = end_time - start_time
print(difference) # Выведет: 2 days 00:00:00
print(difference.days) # Выведет: 2
      workalendar: workalendar специально разработана для работы с календарями, учитывающими рабочие дни и праздники. Она позволяет вычислять разницу между датами, исключая нерабочие дни. Поддерживает календари для различных стран и регионов.
      
from datetime import date
from workalendar.usa import UnitedStates
cal = UnitedStates()
start_date = date(2023, 10, 26)
end_date = date(2023, 11, 2)
working_days = cal.get_working_days_delta(start_date, end_date)
print(working_days)  # Выведет количество рабочих дней между датами, исключая праздники.
      workalendar для определения рабочих дней, а затем вручную итерироваться по дням и часам, учитывая заданные интервалы работы и обеденные перерывы.
      
from datetime import datetime, timedelta
from workalendar.usa import UnitedStates
def calculate_working_time(start_time, end_time, work_start_hour=9, work_end_hour=17):
    cal = UnitedStates()
    total_working_time = timedelta()
    current_date = start_time.date()
    while current_date <= end_time.date():
        if cal.is_working_day(current_date):
            workday_start = datetime(current_date.year, current_date.month, current_date.day, work_start_hour, 0, 0)
            workday_end = datetime(current_date.year, current_date.month, current_date.day, work_end_hour, 0, 0)
            # Учитываем пересечения со временем начала и конца
            day_start = max(start_time, workday_start)
            day_end = min(end_time, workday_end)
            if day_start < day_end:
                total_working_time += (day_end - day_start)
        current_date += timedelta(days=1)
    return total_working_time
start_time = datetime(2023, 10, 26, 10, 0, 0)
end_time = datetime(2023, 10, 27, 16, 0, 0)
working_time = calculate_working_time(start_time, end_time)
print(working_time)
      Рекомендации:
datetime и timedelta.workalendar идеальна для учета рабочих дней и праздников.pandas подходит для анализа временных рядов и работы с большим объемом данных.