2012-07-24 10 views

risposta

8

È possibile determinare il numero di giorni tra le date, quindi generare tutte le date e il filtro sui giorni della settimana che ti interessa.

var start = DateTime.Parse("08/17/2012"); 
var end = DateTime.Parse("09/17/2012"); 
int numberOfDays = end.Subtract(start).Days + 1; 
var daysOfWeek = new[] { DayOfWeek.Tuesday, DayOfWeek.Thursday }; 

var dates = Enumerable.Range(0, numberOfDays) 
         .Select(i => start.AddDays(i)) 
         .Where(d => daysOfWeek.Contains(d.DayOfWeek)); 
+0

Non utilizzare Giorni, ma TotalDays proprietà di TimeSpan. I giorni sono solo i componenti del giorno (ad esempio per un periodo di 1 settimana e 2 giorni, restituisce 2, mentre TotalDays restituisce 9 giorni). – digEmAll

+1

@digEmAll Non penso che sia accurato. 'TotalDays' restituisce un' double' e rappresenta i giorni interi e frazionari. 'Days' restituisce un' int', ignorando quindi qualsiasi porzione frazionaria. Ad esempio, per 'TimeSpan.FromDays (9.5)', 'Days' = 9,' TotalDays' = 9.5. –

+0

Sì, ho controllato e hai ragione. Mi scuso, ciò che ho detto si applica ad esempio per gli altri componenti come ore, minuti e così via, ma non per giorni poiché è il componente più grande di TimeSpan :) – digEmAll

4
var start = new DateTime(2012, 8, 17); 
var end = new DateTime(2012, 9, 17); 

var daysToChoose = new DayOfWeek[] { DayOfWeek.Thursday, DayOfWeek.Tuesday }; 

var dates = Enumerable.Range(0, (int)(end - start).TotalDays + 1) 
         .Select(d => start.AddDays(d)) 
         .Where(d => daysToChoose.Contains(d.DayOfWeek)); 
Problemi correlati