본문 바로가기
개발 이야기/C# 이야기

C# datetimepicker 날짜계산 (휴가일수를 계산하기 위한 토요일, 일요일 제외)

by 런던살자 2019. 6. 13.

안녕하세요 마블랑입니다.

 

C#으로 어떠한 프로그램을 개발하던중 두개의 datetimepicker의 날짜 차이를 구하는것은 Timespan을 이용하여 쉽게 구할수 있습니다.

 

하지만 그 사이에 특정요일을 제외해야 하는 경우 즉, 휴가일을 구하기 위해 평일만 구해야하는 경우가 있는데요 (주말은 휴가일수에 빠지지 않으므로 평일만 구한다는 예시를 들었습니다^^)

 

다른 방법도 많이 있고 더 간단한 클래스도 있겠지만 마블랑이 직접 구현한 코드를 이용하여 알려드리려고 합니다. (더 좋은 방법을 아시는 분은 댓글을 통해 공유해주시기를 부탁합니다~)

 

 

예시를 먼저 설명드리겠습니다. 

 

달력을 확인하면 2019년 6월 15일과 16일은 각각 토요일 일요일 입니다. 

 

Datetimepicker를 통해 기간에 포함된 평일을 구해보겠습니다 ^^

 

14일까지 선택했을 때는 12일, 13일, 14일이 모두 평일에 해당하므로 3이라는 결과가 나옵니다.

이제 15일을 포함을 하면 토요일이므로 15일을 제외한 평일의 수 3이 나옵니다.

일요일도 마찬가지 입니다~ 

마지막으로 월요일인 17일을 선택을 하면 1이 증가한 4라는 결과가 출력되는것이 보입니다.

아주 간단하게 샘플 프로그램을 만들었습니다.

 

이것을 휴가일수 계산에 활용하려면 공휴일도 고려를 해야합니다. (이 방법은 추후 연구해보겠습니다)

 

그럼 소스코드를 보겠습니다. 

 

시작날짜를 하루씩 증가하여 해당 요일을 판단하고 평일이면 카운트를 증가시킵니다.

 

요일을 구하는 것은 DayOfWeek를 이용하였습니다. 

 

코드가 아주 간단하므로 잠깐만 보시면 금방 이해하실것 같군요.

 

코드는 아래와 같습니다. 

 

버튼 이벤트에 구현하였습니다.

 

===========================================================================

 

int nBetweenDayCnt = 0;

        private void bt_getDay_Click(object sender, EventArgs e)
        {
            nBetweenDayCnt = 0;

            int i = 0;
            DateTime temp;
            while (true)
            {
                temp = dateTime_From.Value.Date.AddDays(i);
                
                if (temp.DayOfWeek != DayOfWeek.Sunday && temp.DayOfWeek != DayOfWeek.Saturday)
                    nBetweenDayCnt++;
                
                TimeSpan Between = dateTime_To.Value.Date - temp;
                if (Between.Days <= 0)
                {
                    break;
                }

                temp = dateTime_From.Value.Date.AddDays(i);
                i++;
            }
            textBox1.Text = nBetweenDayCnt.ToString();
        }

 

===========================================================================

 

 

궁금하신 것이 있으면 댓글을 달아주시기 바랍니다 :)

 

이상 마블랑이었습니다.

 

읽어주셔서 고맙습니다.

 

댓글