2014-02-15 2 views
0

Я дам вам Дата начала и Дата окончания и один день недели, как понедельникДата начала и Дата окончания и один день недели, как понедельник

Public void check(string StartDate, string EndDate, String Monday 
{ 
    // Logic here 
} 

Как найти, что сколько понедельник с даты начала до конца дату и дату.

ответ

4

Для достижения вашей цели, вы должны пройти STARTDATE, ENDDATE и день недели (prefferably не в виде строки, а как DayOfWeek для лучшего кода-читаемости):

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 лет его 5ms, однако, в течение 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; 

} 
Смежные вопросы