Java 날짜 양력, 음력 변환하기

less than 1 minute read

프로젝트 진행중 현재 날짜를 음력일떄, 양력일때로 각각 검색하는 부분이 있었다.
Util 클래스로 만들어서 사용하면 될듯하다.

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import com.ibm.icu.util.ChineseCalendar;

public class ChineseCalendarUtil { 
    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(); 
    } 
} 

Tags:

Categories:

Updated:

Leave a comment