IT기술, 프로그래밍/Java

Java 일자와 일자 사이 윤달 확인 방법

뱅노 2019. 6. 30. 11:08

가끔 작업을 하다보면, 시작일자와 종료일자 사이에 윤달이 있는지 확인 할 필요가 있다.

윤달이 있고 없고에 따라서 1년 365일 366일이 될 수도 있기 때문이다.

기본적인 수행 로직은 간단하다.

필요할 때 언제든지 꺼내 쓸 수 있도록 하자.

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");

String toDateStr = "20190329";
String fromDateStr = "20200329";

try {
	Date toDate = format.parse(toDateStr);
	Date fromDate = format.parse(fromDateStr);

    if(0 == Integer.parseInt(toDateStr.substring(0, 4)) % 4){
        /* ▲ 시작일자의 년을 가지고 와서 4로 나눴을 때 나머지 값을 확인한다.
        * 윤달은 4년마다 돌아온다. 따라서 나머지 값이 0일 경우가 윤달이 있는 해 이다.
        */
        Date compDate = format.parse(toDateStr.substring(0, 4) + "0229");
        if(compDate.getTime() >= toDate.getTime()){
          System.out.println("toDate - 윤달이 존재합니다.");
        }
    } else if(0 == Integer.parseInt(fromDateStr.substring(0, 4)) % 4){
        Date compDate = format.parse(fromDateStr.substring(0, 4) + "0229");
        if(compDate.getTime() <= fromDate.getTime()){
          System.out.println("from - 윤달이 존재합니다.");
        }
    } else {
    	System.out.println("윤달이 존재하지 않습니다.");
    }

} catch (Exception e) {
	// TODO: handle exception
}

앞써 이야기 했든이 로직은 간단하다.

시작일자와 종료일자를 각각 윤달 여부를 확인한다.

시작일자의 년을 가져와서 윤달이 있는 해 인지 확인하고 종료일자도 동일하다.

그리고 시작일자와 종료일자의 사이에 윤달이 있는지를 확인한다.