Sto cercando un metodo per dividere un intervallo di date in una serie di intervalli di date in base alla dimensione dei giorni. Sto pensando di usarlo per bufferizzare le chiamate a un servizio che, se l'intervallo di date è troppo grande, gli errori di servizio.Dividi intervallo di date in blocchi dell'intervallo di date
Questo è quello che ho inventato finora. Sembra funzionare, ma non sono sicuro che uscirà correttamente. Questo sembra qualcosa che è stato probabilmente fatto diverse volte prima, ma non riesco a trovarlo.
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));
}
}
Sto cercando suggerimenti di miglioramento o "Amico, usa questa funzione esistente per questo!"
Grazie per aver segnalato l'errore, adoro l'aspetto pulito della soluzione. – Khan
Bel codice, grazie! –
Risposta molto bella. Grazie! Vorrei aggiungere come ulteriore - se non si desidera "sovrapporre" modificare la riga "resa return Tuple.Create (start, chunkEnd);" essere "chunkEnd.AddDays (-1)". Ciò assicurerà che le date di inizio/fine di ogni riga non si sovrappongano. –