본문 바로가기

Language/Java / JSP

[Java] 공휴일 체크하기 - 음력, 양력

반응형

지난번에 양력날짜를 음력으로 변환하는 방법에 대해 포스팅하였다.
오늘은 음력날짜 변환방법을 토대로 우리나라 공휴일을 체크하는 방법을 설명해 보겠다.

우리나라의 공휴일은 아래와 같이 양력과 음력으로 나누어 진다.



 앙력 공휴일 - 신정, 3.1절, 어린이날, 현충일, 광복절, 개천절, 한글날, 크리스마스
 음력 공휴일 - 설날(구정) 연휴, 부처님 오신날, 추석 연휴



양력 공휴일은 모두 알다시피 해가 바뀌어도 우리가 일상적으로 얘기하는 양력 날짜에 고정적이며
음력 공휴일은 해마다 양력날짜가 바뀐다. 공휴일 체크하는 로직을 만들때 양력은 일반적인 날짜 체크방법으로 하면 되고
음력은 체크하고자 하는 날짜를 음력으로 변경하여 체크하면 된다.

음력 공휴일도 양력처럼 음력기준으로는 날짜가 변경되지 않으므로 한번 만들어놓으면 변경할 필요가 없다.


음력날짜를 변환할때 사용되는 라이브러리는 지난번 포스팅에서 다운받으면 된다.[포스팅 보기]


아래는 음력 공휴일을 체크하는 소스이다.

import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.ChineseCalendar;


public class HolidayCheck {
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		// 체크할 양력날짜
		String dt = "2014-09-09" ;
		
		
		try {
			
			// 결과값 출력
			System.out.println(isLunar(dt)) ;
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}
	
	
	
	
	/**
	 * 음력 공휴일을 체크한다
	 * @param dt : 체크할 날짜 ( 날짜포맷 : yyyy-MM-dd)
	 * @return
	 */
	private static boolean isLunar(String dt) throws Exception{
		
		boolean result = false ;
		
		
		// 음력 공휴일 목록
		String[] arrLunar = {
				
				"01-01"		// 설날 2 
				, "01-02"	// 설날 3
				, "04-08"	// 부처님 오신날
				, "08-14"	// 추석 1
				, "08-15"	// 추석 2
				, "08-16"	// 추석 3
				, "12-31"	// 설날 1
		} ;
		
		
		
		ChineseCalendar chinaCal = new ChineseCalendar();
		Calendar cal = Calendar.getInstance() ;
		
		cal.set(Calendar.YEAR, Integer.parseInt(dt.substring(0, 4)));
		cal.set(Calendar.MONTH, Integer.parseInt(dt.substring(5, 7)) - 1);
		cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dt.substring(8,10)));
		chinaCal.setTimeInMillis(cal.getTimeInMillis());
		

		int chinaYY = chinaCal.get(ChineseCalendar.EXTENDED_YEAR) - 2637 ;
		int chinaMM = chinaCal.get(ChineseCalendar.MONTH) + 1;
		int chinaDD = chinaCal.get(ChineseCalendar.DAY_OF_MONTH);
		
		
		
		
		String chinaDate = "" ;		// 음력 날짜
		
		
		if(chinaMM < 10)			// 월
			chinaDate += "0" + Integer.toString(chinaMM) ;
		else
			chinaDate += Integer.toString(chinaMM) ;
		
		
		chinaDate += "-" ;			// 날짜 구분자
		
		
		if(chinaDD < 10)			// 일
			chinaDate += "0" + Integer.toString(chinaDD) ;
		else
			chinaDate += Integer.toString(chinaDD) ;
		
		
		
		// 음력 공휴일 목록과 변환한 음력날짜가 일치하는지 비교
		for(int i=0; i < arrLunar.length; i++){
			String tmpLunar = arrLunar[i] ;
			
			if(tmpLunar.equals(chinaDate)){
				result = true ;
				
			}

		}
		
		return result ;
		
	}

}





위 소스에서는 음력 공휴일만 체크하였는데, 양력도 동일한 방식으로 날짜를 배열에 넣어 전달받은 날짜와 비교하면 된다.


참고로 근로자의 날, 대체휴일제 등은 법적인 휴일이 아니므로 양력에 포함할지 않할지는 정책에 따라 정하면 된다.