본문 바로가기
컴퓨터관련

Java를 이용하여 음력과 양력 변환하기

by 기록이답이다 2016. 1. 26.
반응형

Database에 휴일을 집어넣고 일정을 표시해줄때 공휴일을 표시해줄 경우가 있다.

 

양력으로 되어있는 일반 공휴일은 처리하기가 간단한데 음력으로 되어있는 공휴일 (예를 들어 설날 또는 추석)은

음력 데이터가 있어야 한다.

 

그래서 인터넷에 있는 음력데이터를 이용하여 디비에 넣고 확인을 해보니 음력 날짜가 맞지 않다.

 

그래서 구글에서 검색해보니 java를 이용하여 양력과 음력을 변환할 수 있는 소스가 존재했다.

 

아래는 소스이다.

 

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.ibm.icu.util.ChineseCalendar;

public class LunarToSolarTest {
	
	public static String getDateByString(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(date);
	}		
	
    /**
     * 음력날짜를 양력날짜로 변환
     * @param 음력날짜 (yyyyMMdd)
     * @return 양력날짜 (yyyyMMdd)
     */
    private static String convertLunarToSolar(String date) {
        ChineseCalendar cc = new ChineseCalendar();
        Calendar cal = Calendar.getInstance();
        
        cc.set(ChineseCalendar.EXTENDED_YEAR, Integer.parseInt(date.substring(0, 4)) + 2637);
        cc.set(ChineseCalendar.MONTH, Integer.parseInt(date.substring(4, 6)) - 1);
        cc.set(ChineseCalendar.DAY_OF_MONTH, Integer.parseInt(date.substring(6)));
        
        cal.setTimeInMillis(cc.getTimeInMillis());
        return getDateByString(cal.getTime());

} /** * 양력날짜를 음력날짜로 변환 * @param 양력날짜 (yyyyMMdd) * @return 음력날짜 (yyyyMMdd) */ private static String converSolarToLunar(String date) { ChineseCalendar cc = new ChineseCalendar(); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4))); cal.set(Calendar.MONTH, Integer.parseInt(date.substring(4, 6)) - 1); cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(date.substring(6))); cc.setTimeInMillis(cal.getTimeInMillis()); int y = cc.get(ChineseCalendar.EXTENDED_YEAR) - 2637; int m = cc.get(ChineseCalendar.MONTH) + 1; int d = cc.get(ChineseCalendar.DAY_OF_MONTH); StringBuffer ret = new StringBuffer(); ret.append(String.format("%04d", y)).append("-"); ret.append(String.format("%02d", m)).append("-"); ret.append(String.format("%02d", d)); return ret.toString(); } public static void main(String[] args) { System.out.println("음력 2015년 12월 29일을 양력으로 변환하면 => " + convertLunarToSolar("20151229")); System.out.println("양력 2016년 2월 7일을 음력으로 변환하면 =>\t " + converSolarToLunar("20160207")); } }

icu download : http://site.icu-project.org/download

 

첨부파일

 

icu_jar.7z.001

icu_jar.7z.002

 

참고한 사이트 : http://kimstar.kr/6881/

 

반응형