Poszukuję metody podziału zakresu dat na serię zakresów dat według wielkości fragmentów dni. Planuję używać tego do buforowania wywołań do usługi, która jeśli zakres dat jest zbyt duży, błędy usługi.Podział zakresu dat na fragmenty zakresu dat
Oto, do czego do tej pory doszedłem. Wygląda na to, że działa, ale nie jestem pewien, czy zakończy się poprawnie. Wygląda to na coś, co prawdopodobnie zostało zrobione kilka razy wcześniej, ale nie mogę go znaleźć.
public IEnumerable<Tuple<DateTime, DateTime>> SplitDateRange(DateTime start, DateTime end, int dayChunkSize)
{
var newStart = start;
var newEnd = start.AddDays(dayChunkSize);
while (true)
{
yield return new Tuple<DateTime, DateTime>(newStart, newEnd);
if (newEnd == end)
yield break;
newStart = newStart.AddDays(dayChunkSize);
newEnd = (newEnd.AddDays(dayChunkSize) > end ? end : newEnd.AddDays(dayChunkSize));
}
}
Szukam sugestii poprawy, lub "Dude, użyj tej funkcji do tego!"
Dzięki za wskazanie błędu, Kochaj czysty wygląd swojego rozwiązania. – Khan
Ładny kod, dzięki! –
Bardzo ładna odpowiedź. Dziękuję Ci! Dodałbym jako dodatkowy - jeśli nie chcesz "nakładania się", zmodyfikuj wiersz "zwrot plonu Tuple.Create (start, chunkEnd);" być "chunkEnd.AddDays (-1)". Zapewni to, że daty rozpoczęcia/zakończenia dla każdego wiersza się nie pokrywają. –