반응형
아래 포스팅된 Java를 이용하여 음력과 양력 변환하기 를 이용하여 2016년 부터 2030년까지 공휴일을 조회해보자
소스는 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 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 Map<string, string= "" > solarHolidayMap = new HashMap<string, string= "" >(); public static Map<string, string= "" > lunarHolidayMap = new HashMap<string, string= "" >(); 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 } </string,></string,></string,></string,> |
실행결과는 아래와 같다.
반응형
'컴퓨터관련' 카테고리의 다른 글
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 |