Разбить диапазон дат на меньшие диапазоны

#python

#python

Вопрос:

Я хотел бы разделить диапазон дат на меньшие диапазоны дат. Функция должна принимать начальную дату, конечную дату и количество фрагментов и возвращает список кортежей даты начала и даты окончания.

Если я передам (2019-04-01, 2019-04-22, 5), он должен вернуть:

 (2019-04-18, 2019-04-22)
(2019-04-13, 2019-04-17)
(2019-04-08, 2019-04-12)
(2019-04-03, 2019-04-07)
(2019-04-01, 2019-04-02)
  

Это то, что у меня есть сейчас:

 from datetime import date, timedelta

def split_date_range(start_date, end_date, num_of_slices):

    interval =(end_date - start_date).days / num_of_slices

    for i in range(num_of_slices):

        partition_start_date = max(start_date, end_date - timedelta(days=(i   1) * interval   i))
        partition_end_date = partition_start_date   timedelta(days=interval)
        yield (partition_start_date, partition_end_date)


if __name__ == '__main__':
    start_date = date.today() - timedelta(days=22)
    end_date = date.today() - timedelta(days=1)
    print(list(split_date_range(start_date, end_date, 5)))
  

Логика, лежащая в основе этого, заключается в том, что разница между 2019-04-01 и 2019-04-22 составляет 22 дня. Если я использую 22, разделите на 5, округлите до 5 (4.4). Каждый диапазон дат кортежа составляет 5 дней, а остальные дни остаются последним элементом в списке кортежей. Какой самый удобный способ реализовать это?

Комментарии:

1. Я бы выбрал datetime модуль. Вы пробовали его использовать?

2. Можете ли вы показать, что вы пробовали, и точно описать, на каком шаге вы застряли? На самом деле SO не является сервисом для написания кода.

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

4. Добавлен мой код. интересно, какой способ сделать это лучше и аккуратнее.

5. То, что у вас есть, кажется мне достаточно хорошим.