#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. То, что у вас есть, кажется мне достаточно хорошим.