2014-02-15 191 views

回答

4

爲了實現自己的目標,你應該通過起始日期,結束日期和星期幾(prefferably不是字符串,但作爲一個更好的代碼可讀性一個星期幾):

public List<DateTime> GetListOfDays(DateTime startDate, DateTime endDate, DayOfWeek dayOfWeek) 
{ 
    var list = new List<DateTime>(); 
    var daysDifference = endDate.Subtract(startDate).TotalDays; 
    for (int i = 0; i < daysDifference; i++) 
    { 
     var date = startDate.AddDays(i); 
     if (date.DayOfWeek == dayOfWeek) 
     { 
      list.Add(date); 
     } 
    } 
    return list; 
} 

返回列表將包含所有星期一(如果您通過Monday作爲dayOfWeek)與他們的確切日期。如果你在返回的列表上執行.Count(),你可以看到它們中有多少被返回。

+0

@NayeemMansoori我張貼這不工作的代碼循環。無論哪種方式都很好。 –

0
public void CountMondays(DateTime start, DateTime end){ 
    int mondays = 0; 
    for(DateTime date = start;date <= end; date=date.AddDays(1)){ 
     if(date.DateOfWeek == DayOfWeek.Monday) 
      mondays++; 
    } 
    return mondays; 
} 
0

這將工作,並不需要循環。速度的差異並不大。大約100年來的5毫秒,然而,2000年間,它的周圍60-70ms(使用列表排序以上),其中非環狀始終爲0

public static int GetAmountBetween(DateTime startDate, DateTime endDate, DayOfWeek dayOfWeek) 
{ 
    int addAmount = 0; 
    switch (dayOfWeek) 
    { 
     case DayOfWeek.Monday: 
      addAmount = 0; 
      break; 
     case DayOfWeek.Tuesday: 
      addAmount = 1; 
      break; 
     case DayOfWeek.Wednesday: 
      addAmount = 2; 
      break; 
     case DayOfWeek.Thursday: 
      addAmount = 3; 
      break; 
     case DayOfWeek.Friday: 
      addAmount = 4; 
      break; 
     case DayOfWeek.Saturday: 
      addAmount = 5; 
      break; 
     case DayOfWeek.Sunday: 
      addAmount = 6; 
      break; 
    } 

    return (endDate.Subtract(startDate).Days + addAmount)/7; 

} 
相關問題