2016-06-17 8 views
0

시작 날짜 (DateTime), 종료 날짜 (DateTime) 및 DayOfWeek 목록이 제공됩니다. 어떻게 일치하는 모든 날짜를 얻을 :시작 날짜에 종료 날짜와 요일이 주어진 날짜를 가져옵니다.

예 :

StartDate : "06/17/2016" 
EndDate : "06/30/2016" 
DayOfWeek(s) : [0(Monday), 1(Tuesday), 4(Friday)] 

원하는 결과는 다음과 같습니다

Dates = ["06/17/2016", "06/20/2016", "06/21/2016", "06/24/2016", "06/27/2016", "06/28/2016"] 
+1

지금까지 해보신 것은 무엇입니까? 단순히 날짜를 반복하고 'DayOfWeek'이 기준 목록에 있는지 확인하는 방법은 무엇입니까? –

+0

날짜 목록이 약간 틀린 것 같습니다 ... 금요일과 월요일에 누락 된 2016-06-17 (독점적이어야합니까?)이며 수요일 인 2016-06-29를 포함합니다. 이 코드가 필요한 이유가 무엇인지 보여 주지만, 혼동을 피하고 답변 결과가 올바른 예상 결과와 일치하는지 쉽게 확인할 수 있도록 수정할 가치가 있습니다. :) – Chris

답변

2

이에 속하는의 startDate와 종료 날짜 사이의 모든 날짜의 당신 목록을 반환합니다 주어진 enum의 dayOfWeek :

var allDays = Enumerable.Range(0, (endDate - startDate).Days + 1).Select(d => startDate.AddDays(d)); 
var Dates = allDays.Where(dt => dayOfWeek.Contains(dt.DayOfWeek)).ToList(); 
+0

'Enum.IsDefined (dayOfWeek, dt.DayOfWeek)'는 어떻게 생각합니까? 첫 번째 인수는 열거 형의 형식이며 해당 값이 열거 형에 유효하면 간단하게 작동합니다 (https://msdn.microsoft.com/en-us/library/system.enum.isdefined(v=vs. 110) .aspx). 나는 당신이 단지'inputDaysOfWeek.Contains (dt.DayOfWeek)'와 같은 것을 원한다고 생각한다. 여기서'inputDaysOfWeek'는'IEnumerable ' – Chris

+0

입니다. typeOf를 쓰는데 필요합니다. 이제 작동합니다. 크리스를 지적 해 주셔서 고마워요. 그리고 나는 'dayOfWeek (s) : [0 (월요일), 1 (화요일), 4 (금요일)]'이 enum이라고 가정합니다. 목록이나 컬렉션 일 경우'daysOfWeek.Contains (dt.DayOfWeek)'여야합니다. 나는 처음에 그것에 대해서만 대답했다. 그러나 나중에 위 질문에서 코드를 보았을 때 바뀌었다. :) –

+0

나는 당신이 말하는 것을 이해하고 있는지 잘 모르겠습니다. OP가 새로운 열거 형을 정의하고, 원하는 값을 넣은 다음 다른 열거 형의 일치하는 값을 포함하는지 확인하기 위해 새 열거 형을 확인해야한다고 제안 하시겠습니까? 그렇다면 이것은 끔찍한 생각처럼 들립니다! – Chris

1

또 다른 가능한 해결책은 이것이 간단하다고 생각합니다. 다른 솔루션보다 더 많은 비용과 더 많은 리소스를 요구하더라도 이해하고 디버그 할 수 있습니다.

var startDate = new DateTime(2016, 06, 17); 
    var endDate = new DateTime(2016, 06, 30); 

    DayOfWeek[] daysOfWeek = { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Friday }; 

    List<DateTime> dates = new List<DateTime>(); 
    if (endDate >= startDate) 
    { 
     var tmp = startDate; 
     tmp = tmp.AddDays(1); //I notice you didn't add 06/17/2016 that is friday, if you want to add it, just remove this line 
     do 
     { 
      if (daysOfWeek.Contains(tmp.DayOfWeek)) 
       dates.Add(tmp); 
      tmp = tmp.AddDays(1); 
     } 
     while (tmp <= endDate); //If you don't want to consider endDate just change this line into while (tmp < endDate); 
    } 
관련 문제