Вот метод, который сделает разделение, которое вы хотите. Обратите внимание, что нет никакой проверки, чтобы убедиться, что начальная start
предшествует end
.
public IEnumerable<(DateTime Start, DateTime End)> DaySplit(DateTime start, DateTime end)
{
var partition = start.AddDays(1).Date;
while(partition < end)
{
yield return (start, partition);
start = partition;
partition = start.AddDays(1);
}
yield return (start, end);
}
Обратите внимание, что диапазоны будут создаваться лениво, поэтому вам придется выполнить итерацию для получения значений либо в foreach
l oop или позвонив по номеру ToList
или ToArray
. Кроме того, он использует кортежи значений из C# 7. Вместо этого вы можете использовать Tuple<DateTime, DateTime>
или пользовательский тип.