본문 바로가기

Language/Java / JSP

[Java] 날짜 양력 -> 음력 변환 방법

반응형

자바에서 날짜를 양력에서 음력으로 변환하는것에 대한 내용이다. 다른 훌륭한 블로거들의 글을 참고하여 변환하는 방법을 작성하였다. (오래된지라 참고했던 블로거의 URL이 어디인지 기억이 안난다 ;)

자바에서는 기본적으로 날짜 관련된 객체로 calendar 를 이용한다.
하지만 프로그래밍 언어라는게 외국에서 개발되어 우리나라나 중국에서 사용하는 음력 날짜는 지원하지 않는다.

하지만 ibm에서 icu 라는 라이브러리를 만들어 배포하고 있어, 해당 라이브러리에 chianCalendar를 이용하면 음력 날짜를 사용할 수 있다.


[icu 라이브러리 다운]


icu4j-4_8_1_1.jar

 



아래 소스는 2014-08-30 양력 날짜에 해당하는 음력 날짜를 콘솔에 출력하는 예제이다.

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


public class ChinaDate {

	public static void main(String[] args) {

		
		String toDay = "2014-08-30" ;
		
		
		
		ChineseCalendar chinaCal = new ChineseCalendar();
		Calendar cal = Calendar.getInstance() ;
		
		cal.set(Calendar.YEAR, Integer.parseInt(toDay.substring(0, 4)));
		cal.set(Calendar.MONTH, Integer.parseInt(toDay.substring(5, 7)) - 1);
		cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(toDay.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 = "" ;		// 음력 날짜
		
		chinaDate += chinaYY ;		// 년
		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) ;
		
		
		
		System.out.println(chinaDate) ;
		

	}

}




해당 소스를 본인의 목적에 맞겨 절절하게 수정하거나 참고하여 공통으로 사용하는 메소드로 만들어 이용하면 된다.