반응형
아래 포스팅된 Java를 이용하여 음력과 양력 변환하기 를 이용하여 2016년 부터 2030년까지 공휴일을 조회해보자
소스는 아래와 같다.
package javatest; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.ibm.icu.util.ChineseCalendar; public class LunarToSolarTest { public static MapsolarHolidayMap = new HashMap (); public static Map lunarHolidayMap = new HashMap (); public static String getDateByString(Date date) { return getDateByString(date, "-"); } public static String getDateByString(Date date, String separator) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy"+separator+"MM"+separator+"dd"); return sdf.format(date); } /** * 양력날짜를 음력날짜로 변환 * @param 양력날짜 (yyyyMMdd) * @return 음력날짜 (yyyyMMdd) */ private static String converSolarToLunar(String date) { return converSolarToLunar(date, "-"); } private static String converSolarToLunar(String date, String separator) { 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(separator); ret.append(String.format("%02d", m)).append(separator); ret.append(String.format("%02d", d)); return ret.toString(); } // end converSolarToLunar public static String getDay(String date, int amount) { Calendar cal = Calendar.getInstance(); cal.set(Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(4, 6)) - 1, Integer.parseInt(date.substring(6))); cal.add(Calendar.DAY_OF_MONTH, amount); return getDateByString(cal.getTime(), ""); } public static void main(String[] args) throws IOException { solarHolidayMap.put("0101", "신정"); solarHolidayMap.put("0301", "삼일절"); solarHolidayMap.put("0505", "어린이날"); solarHolidayMap.put("0606", "현충일"); solarHolidayMap.put("0815", "광복절"); solarHolidayMap.put("1003", "개천절"); solarHolidayMap.put("1009", "한글날"); solarHolidayMap.put("1225", "성탄절"); lunarHolidayMap.put("0101", "구정"); lunarHolidayMap.put("0102", "구정"); lunarHolidayMap.put("0408", "석가탄신일"); lunarHolidayMap.put("0814", "추석"); lunarHolidayMap.put("0815", "추석"); lunarHolidayMap.put("0816", "추석"); int year = 2016; int endYear = 2030; Calendar c = Calendar.getInstance(); c.set(year, 0, 1); // 1월 1일부터 시작 String solarDate = ""; String lunarDate = ""; for(int i=year; i<=endYear;) { solarDate = getDateByString(c.getTime(), ""); lunarDate = converSolarToLunar(solarDate, ""); c.add(Calendar.DAY_OF_MONTH, 1); // 양력휴일 체크 String solarMmdd = solarDate.substring(4,8); if(solarHolidayMap.containsKey(solarMmdd)) { System.out.println(solarDate + " ==> " + solarHolidayMap.get(solarMmdd)); } // 음력휴일 체크 String lunarMmdd = lunarDate.substring(4,8); if(lunarHolidayMap.containsKey(lunarMmdd)) { // 음력 12월은 마지막날이 29일, 30일 계속 번갈아가면서 있으므로 // 양력에서 하루를 빼준날이 구정시작하는 날짜이다. if(lunarMmdd.equals("0101")) System.out.println(getDay(solarDate, -1) + " ==> 구정"); System.out.println(solarDate + " ==> " + lunarHolidayMap.get(lunarMmdd)); } year = c.get(Calendar.YEAR); if(year != i) { i++; System.out.println(""); } if(i > endYear) break; } // end for_i } // end main }
실행결과는 아래와 같다.
반응형
'컴퓨터관련' 카테고리의 다른 글
Oracle 사용자 테이블과 컬럼 및 코멘트 구하는 쿼리 (0) | 2016.01.27 |
---|---|
Java로 달력을 만들어 봅시다. (1) | 2016.01.27 |
Java를 이용하여 음력과 양력 변환하기 (0) | 2016.01.26 |
Oracle timestamp 값을 date 형식으로 변환하기 (0) | 2016.01.21 |
Linux - netstat 명령어 사용법 (0) | 2016.01.20 |