[Java] Date 마지막 날짜 구하기

HodooHa·2024년 4월 20일

Q. 현재 달을 구해서 2월은 "28일까지", 4, 6, 9, 11월은 "30일까지", 나머지는 "31일까지"를 출력해보자.

문제의 취지는 하기와 같이 Date를 이용하여 현재의 달을 구하고 if구문 혹은 switch를 활용하여 마지막 날짜를 구하는 것이었다.

public class LastDate1 {
    public static void main(String[] args) {
        Date today = new Date();
        int month = today.getMonth();
        int last = 0;

        if (month == 2) { // if 구문
            last = 28;
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            last = 30;
        } else {
            last = 31;
        }

//        switch (month) {  // switch 구문
//            case 2:
//                last = 28;
//                break;
//
//            case 4, 6, 9, 11:
//                last = 30;
//                break;
//
//            default:
//                last = 31;
//                break;
//        }

        System.out.println(month + "월은 " + last + "일까지");

그러나 이 방법은 월별 마지막날을 우리가 직접 알아야 한다.
이렇게 하드코딩하지 않고 Date를 활용하여 월별 마지막날을 구하는 방법이 있을 것 같아 열심히 구글링했다.

있었다!

Date(year, month, 0)으로 Date 변수를 만들고 getDate()를 하면 year년 month+1월의 마지막날이 구해진다.

public class LastDate2 {
    public static void main(String[] args) {
        for (int i = 1; i < 13; i++) {
            Date someday = new Date(2023, i, 0);
            int month = i; // i가 12이면 2024년 1월이 됨.
            System.out.println(month + "월은 " + someday.getDate() + "까지");
            
            //        1월은 31까지
            //        2월은 28까지
            //        3월은 31까지
            //        4월은 30까지
            //        5월은 31까지
            //        6월은 30까지
            //        7월은 31까지
            //        8월은 31까지
            //        9월은 30까지
            //        10월은 31까지
            //        11월은 30까지
            //        12월은 31까지
            
        }
    }
}

Date someday = new Date(2023, i, 0);
Date의 month는 0~11의 값으로 someday의 월은 (i+1)월이 된다.
date를 0으로 지정하면 그 전달의 마지막날로 지정이 된다.
즉, (i+1)월의 0일은 i월의 마지막날이다.
따라서 내가 구하고자 하는 월의 0일로 Date 변수를 만들어 getDate()를 하면 된다.

※ 참고!! 윤년이 있는 2월의 경우 year를 잘 지정해주어야 한다.

Date twoMonth23 = new Date(2023, 2, 0);
        Date twoMonth24 = new Date(2024, 2, 0);
        System.out.println("2023년 2월의 마지막날: "+twoMonth23.getDate() +"일"); 
        // 2023년 2월의 마지막날: 28일
        System.out.println("2024년 2월의 마지막날: "+twoMonth24.getDate() + "일"); 
        // 2024년 2월의 마지막날: 29일

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글