2014-02-26 1 views
0

C#을 사용하여 영업일을 찾으려고합니다. 나는 미국 휴일을 찾는 방법이 있는지 궁금하거나 나는 단지 날짜가 휴일인지 여부를 결정하는 함수를 작성해야합니까?연휴 기간 C#

public bool isHoliday(DateTime date) 
{ 
//holiday input 
} 
+2

100 명 미국인에게 미국 공휴일 목록을 요청하면 100 가지의 답변을 얻을 수 있습니다. 앱의 휴일 구성 요소를 정의해야합니다. –

+0

이 사이트는이를위한 서비스와 API를 제공합니다. 나는 그들이 얼마나 훌륭한 지 모르며 나는 그들과 제휴하지 않았다.검색 결과 일뿐입니다. http://www.timeanddate.com/services/api/ – Steve

+0

기관에 따라 모든 휴일이 인정되는 것은 아닙니다. 따라서 명시 적으로 정의해야 할 수도 있습니다. – user1477388

답변

2

이 예를 사용할 수있다 : http://www.codeproject.com/Articles/11666/Dynamic-Holiday-Date-Calculator

링크에서 제공되는 솔루션 :

우리는이 다른 모두를위한 모든 규칙을 저장하는 데 이상적 일 것이다 결정

공휴일을 XML 파일에 저장 한 다음 클래스가 해당 규칙을 해석하고 각 공휴일의 정확한 날짜를 계산할 수있는 클래스를 작성합니다. 이를 위해 우리는 공휴일을 서로 비슷하게 계산 된 유형으로 구분해야했습니다. 다음은 우리가 처리 휴일의 다른 유형과 샘플 XML 구성은 각각 다음과 같습니다

<Holiday name="Groundhog Day"> 
    <Month>2</Month> 
    <Day>2</Day> 
</Holiday> 

<Holiday name="Tax Day"> 
    <WeekdayOnOrAfter> 
     <Month>4</Month> 
     <Day>15</Day> 
    </WeekdayOnOrAfter> 
</Holiday> 

코드는 여기에 게시하려면 너무 많은,하지만이 문제를 해결해야한다. 해당 코드를 사용하고 필요에 맞게 수정하십시오.

+0

제 생각에 그것은 다른 기관에 적합 할 수 있습니다. 내가 맞습니까? – galaxyan

+0

@galaxyan 예. 필자가 제공 한 링크에서'Jay Muntz'의 게시물을 읽으십시오. 그는 어떻게 문제를 해결했는지 자세하게 설명합니다. 희망이 당신을 도와줍니다. – Dayan

+0

XML을 사용하면 모든 논리를 나타낼 수 없습니다. 예를 들어 근무일의 폴백은 주말의 공휴일입니다. 이 라이브러리를 사용하여 폴백을 지원하는 계산에 사용할 수 있습니다. https://www.nuget.org/packages/Nager.Date – live2

0

당신이 주말이나 평일이야,하지만 붙박이가 당신이 요구하는지 무슨 경우는 공휴일의 여부를 결정하는 것이었다 존재하지 않는 경우는 결정 DateTime.DayOfWeek를 사용할 수 있습니다.

DateTime.DayOfWeek

0

우리 회사는 회사의 휴가 모든 날짜에 대한 SQL 테이블을 사용하십시오, 그래서 이것은 간단한 단일 SELECT (또는 저장 프로 시저) 일 것이다. 그런 다음 누군가는 그 테이블을 유지해야합니다. 그것이 너라면, 하드 코딩은 꽤 똑같을 것이다.

하나의 주요 대안은 공휴일을 나열하는 웹 사이트를 긁는 것입니다. 예를 들어 발렌타인 데이를 제외하고 연방 공휴일 만 원한다고 가정합니다. 응용 프로그램에서 수행중인 작업에 따라 표준 목록에서 벗어날 수 있어야 할 수도 있습니다.

1

이것은 절대 날짜가있는 공휴일에 대해 미국 공휴일 테이블을 저장하는 방법의 매우 기본적인 예입니다. 노동절과 콜럼버스 데이는 날짜가 변하기 때문에 약간의 상상력이 필요합니다.

class VariableHoliday 
{ 
    public string Name {get; set;} 

    public bool IsOnDate(DateTime date) 
    { 
     //logic to detect the variable dates goes here! 
    } 
} 

static readonly Dictionary<DateTime, string> m_Holidays = new Dictionary<DateTime,string> 
{ 
    { new DateTime(1,1,1), "New Years Day" }, 
    { new DateTime(1,7,4), "Independence Day" }, 
    { new DateTime(1,7,4), "Independence Day" }, 
    /*FILL OUT ALL OF THE HOLIDAYS YOU WANT TO OBSERVE*/ 
}; 

static List<VariableHolidays> m_VariableHolidays = new List<VariableHolidays>(); 

public bool isHoliday(DateTime date) 
{ 
    bool isHoliday = m_Holidays.HasKey(new DateTime(1, date.Month, date.Day)); 

    if(!isHoliday) 
     m_VariableHolidays.Any(p => p.IsOnDate(date)); 
} 

public string getHolidayName(DateTime date) 
{ 
    if(m_Holidays.HasKey()) 
     return m_Holidays[new DateTime(1, date.Month, date.Day)]; 
    else 
    { 
     var holiday = m_VariableHolidays.FirstOrDefault(p => p.IsOnDate(date)); 
     if(holiday != null) return holiday.Name 
    } 

    throw new InvalidOperationException("Date is not a holiday"); 
}