Вы можете использовать библиотеку CalendarPeriodCollector из this :
// ----------------------------------------------------------------------
public void CalendarPeriodCollectorSample()
{
CalendarPeriodCollector collector =
new CalendarPeriodCollector( new CalendarPeriodCollectorFilter(),
new TimeRange( new DateTime( 2011, 4, 30 ), new DateTime( 2011, 5, 30 ) ) );
collector.CollectDays();
foreach ( ITimePeriod period in collector.Periods )
{
Console.WriteLine( "Period: " + period ); // all days between 04/30/2011 and 05/30/2011
}
} // CalendarPeriodCollectorSample
Вы также можете указать дни исключения (выходные) или собрать периоды по часам.