2012-07-24 22 views

cevap

8

ardından ilgilendiğiniz haftanın günlerinde tüm tarihleri ​​ve filtreyi oluşturmak.

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

Günleri ama TotalDays kullanmayın TimeSpan'ın mülkü. Günler sadece günlerin bir parçasıdır (örneğin, 1 hafta ve 2 gün zaman dilimleri için, 2 döndürürken, TotalDays 9 gün döndürür). – digEmAll

+1

@digEmAll Bunun doğru olduğunu sanmıyorum. 'TotalDays' bir 'double' döndürür ve tüm ve kesirli günleri temsil eder. 'Gün' bir 'int' döndürür, böylece herhangi bir kesirli kısmı görmezden gelir. Örneğin, 'TimeSpan.FromDays (9.5) ',' Days' = 9, 'TotalDays' = 9.5’dir. –

+0

Evet, kontrol ettim ve haklısın. Özür dilerim, söylediklerim örneğin saat, dakika ve benzeri diğer bileşenler için geçerlidir, ancak TimeSpan'ın en büyük bileşeni olduğundan günler için değil :) – 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)); 
İlgili konular