C# 닷넷 프로그램을 개발할 때 날짜를 처리하는 로직을 구현해야 할 때가 있습니다.
날짜를 처리하는 과정에서 특정 월(달)의 마지막 일(Day) 또는 마지막 일자(Date)를 가져와서 처리하는 구문을 많이 사용하게 되는데 기본적으로 C# 닷넷에서 월의 마지막 일자를 가져오는 메서드는 제공되지 않습니다. 따라서 필요한 경우 개발자가 적절한 방법으로 월의 마지막 일자를 가져오는 구문을 작성해 주어야 합니다.
이번 글에서는 C#에서 특정 월(月)의 마지막 일자를 가져오는 쉬운 방법 3가지에 대해 알아보겠습니다.
특정 날짜에 대한 해당 월의 마지막 일 또는 일자를 가져오는 방법
▶ 특정 일자에 대한 해당 월의 마지막 일자를 가져오는 방법은 다양한 방법으로 구현이 가능합니다.
- 아래 설명은 가장 기본적인 방법으로 구현한 예제 입니다.
쉬운 설명을 위해 현재 날짜에 대한 월의 마지막 일(Day)과 일자(Date)를 가져오는 예제입니다.
DateTime now = DateTime.Now; //현재날짜 가져옴
now = now.AddMonths(1); //한 달은 더해줌.
string nmonth = now.ToString(“yyyy-MM-“) + “01”; //다음 달의 1일로 해줌.
DateTime LastDate = DateTime.Parse(nmonth).Add.Days(–1); //1일에서 하루를 빼줌(그럼 전달의 마지막 날짜가 됨)
string ResultDay = LastDate.ToString(“dd”); //달의 마지막 일자
|
▲ 위 소스 구문에 대한 간단한 설명입니다.
- 특정 날짜, 여기서는 현재 날짜를 기준으로 합니다.
- 날짜에서 한 달을 더해 줍니다.
- 한 달이 더해진 날짜에서 년-월은 그대로 두고, 일(day)만 ’01’로 해 줍니다. 즉, 해당 월의 1일로 해 줍니다.
- 01일에서 하루를 빼면 이전 달의 마지막 날짜가 됩니다.
위의 풀어서 구현한 구문을 한 줄로 표현하기
▶ 이해를 돕기 위해 앞 단락에서는 단계적으로 풀어서 구문을 작성하였습니다.
동일한 과정을 한 줄로 구현이 가능합니다.
string ResultDay = DateTime.Parse(DateTime.Now.AddMonths(1).ToString(“yyyy-MM-“) + “01”).AddDays(–1).ToString(“dd”);
string LastDate = DateTime.Parse(DateTime.Now.AddMonths(1).ToString(“yyyy-MM-“) + “01”).AddDays(–1).ToString(“yyyy-MM-dd”);
|
DaysInMonth 메소드를 사용하여 월의 마지막 일자 가져오기
▶ 일반적으로 앞 단락에서 설명한 다음 달 1일에서 하루를 빼는 방법으로 특정 달의 마지막 일자를 구하는 방법을 많이 사용하지만 월별 일수를 가져오는 DaysInMonth 메소드를 사용해서 간단하게 월의 마지막 일(day) 또는 일자(date)를 구할 수도 있습니다.
//마지막 일(day)
int ResultDay = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
//월의 마지막 일자(date)
DateTime LastDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, ResultDay);
|
- DaysInMonth 메소드는 년도와 월을 인수로 주었을 때 해당 년-월의 일 수를 정수로 반환해 줍니다.
즉, 해당 월의 마지막 일(day)를 쉽게 구할 수 있는 메소드 입니다. - 이렇게 구한 일 수를 DateTime형 변수를 생성하면서 년,월,일을 지정해서 해당 월의 마지막 일자를 쉽게 구할 수 있습니다.
마무리
다음 달의 1일에서 하루를 빼서 이전 달의 마지막 일자는 구할 때 기준 일자에서 한 달을 더하는 과정에서 기준 일자가 31일인 경우 결과가 어떻게 되는 확인해 보시기 바랍니다.
일반적으로 기준 일자가 2024-01-24일 때 AddMonths(1)을 해 주면 결과는 2024-02-24일 됩니다. 하지만 만약 기준 일이 2024-01-31에서 동일하게 AddMonths(1)을 해주면 결과가 어떻게 될 것이지 필히 확인해 보시기 바랍니다.
확인 결과에 따라 AddMonths(1) 과정에서 일자를 변경하는 추가 작업이 필요할 수 있습니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^