2015-08-24 39 views
1

我的情況是用戶選擇一個財政年度,比如說2015年1月1日至2015年12月31日。然後他選擇日期說'星期六','星期日'。C# - 獲取2日期之間的天數

我想獲取上述條件之間的所有日期。從日期範圍

.... 
    for (var date = fromDate; date <= toDate; date = date.AddDays(1)) 
     temp.Add(date);   

可是如何才能讓只有天星期六「,「SUNDAY」 - :

我能得到的日期也是這樣嗎?

回答

8

使用DayOfWeek屬性:

for (var date = fromDate; date <= toDate; date = date.AddDays(1)) 
{ 
    if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday) 
      temp.Add(date); 
} 

在情況下,如果設定一週的天也不是一成不變的:

HashSet<DayOfWeek> daysOfWeek = new HashSet<DayOfWeek> { DayOfWeek.Saturday, DayOfWeek.Sunday }; 
List<DateTime> temp = new List<DateTime>(); 
for (var date = fromDate.Date; date <= toDate; date = date.AddDays(1)) 
    if (daysOfWeek.Contains(date.DayOfWeek)) 
     temp.Add(date); 
+0

'DayOfWeek'是不同的每次。如果它不同呢? – Anup

+0

@Backs哦,不需要,但謝謝; D。堆棧溢出是我可以寫一些程序的原因哈哈,我只是回答一些謝謝:D –

+0

如果用戶選擇'星期一'或'星期二'或可能是一週中的所有天,那麼上面的代碼將不會做。如何處理呢? – Anup

5
var fromDate = new DateTime(2015, 1, 1); 
var toDate = new DateTime(2015, 2, 15); 
var dates = Enumerable.Range(0, (int)(toDate - fromDate).TotalDays + 1) 
    .Select(i => fromDate.AddDays(i)) 
    .Where(i => i.DayOfWeek == DayOfWeek.Saturday || i.DayOfWeek == DayOfWeek.Sunday); 


foreach(var date in dates) 
{ 
    Console.WriteLine("{0:yyyy-MM-dd ddd}", date); 
} 

.Net fiddle

0

迴路簡單,沒有工作,但Linq更有趣。

但是@Eric:爲什麼旗子呢?您可以直接選擇工作日:

DateTime fromDate = new DateTime(2015, 1, 1); 
DateTime toDate = new DateTime(2015, 2, 15); 
DateTime[] dates = Enumerable.Range(0, (int)toDate.Subtract(fromDate).TotalDays + 1) 
    .Select(i => fromDate.AddDays(i)) 
    .Where(i => (i.DayOfWeek == DayOfWeek.Monday || i.DayOfWeek == DayOfWeek.Sunday)).ToArray(); 


foreach(DateTime date in dates) 
{ 
    Console.WriteLine("{0:yyyy-MM-dd ddd}", date); 
} 
0

可以使用TimeSpan

timespan p = new timespan(); 
p = dt2-dt1; 
MessageBox.Show(p.days.tostring());