반응형
Working Day API 찾다가 없어서 만든 java source
그래도 음력 관련 LIBRARY는 있어서 사용하였습니다.
ICU(International Components for Unicode) : https://sites.google.com/site/icusite/
출처 : 까칠한 수 (http://yysvip.tistory.com/159)
아래는 소스입니다.
package workingDay.check; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import com.ibm.icu.util.ChineseCalendar; public class workingDayCheck { public static void main(String args[]){ System.out.println("# START #"); int chkDayInt = checkDateStr("20130209"); System.out.println(chkDayInt); chkDayInt = checkDateStr("20130210"); System.out.println(chkDayInt); chkDayInt = checkDateStr("20130211"); System.out.println(chkDayInt); chkDayInt = checkDateStr("20130313"); System.out.println(chkDayInt); System.out.println("# END #"); } private static int checkDateStr(String chkStr){ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); int chkDay = 9; Date chkDate = null; try { chkDate = sdf.parse(chkStr); } catch (ParseException e) { e.printStackTrace(); System.out.println("ParseException !"); } /** 법정공휴일 1월 1일 (신정) 2월 9일 (구정 휴일) 2월 10일 (구정) (음력 1월 1일) 2월 11일 (구정 휴일) 3월 1일 (3.1절) 5월 5일 (어린이 날) 5월 17일 (석자탄실일) (음력 4월 8일) 6월 6일 (현충일) 8월 15일 (광복절) 9월 18일 (추석) 9월 19일 (추석) (음력 8월 15일) 9월 20일 (추석) 10월 3일 (개천절) 10월 9일 (한글날) 12월 25일 (크리스마스) **/ ArrayListchkArray = new ArrayList (); /*양력 법정공휴일*/ chkArray.add("0101"); chkArray.add("0301"); chkArray.add("0505"); chkArray.add("0606"); chkArray.add("0606"); chkArray.add("0815"); chkArray.add("1003"); chkArray.add("1009"); chkArray.add("1225"); String restChkStr = chkStr.substring(4); for(String chkTemp : chkArray){ if(restChkStr.equals(chkTemp)){ System.out.println("법정공휴일 " + chkTemp); return 0; } } /*음력 법정공휴일 : 구정, 추석*/ restChkStr = chkStr; String lunarStr = toLunar(restChkStr); if(lunarStr.substring(4).equals("0101")){ System.out.println("법정공휴일 구정"); return 0; }else if(lunarStr.substring(4).equals("0815")){ System.out.println("법정공휴일 추석"); return 0; }else if(lunarStr.substring(4).equals("0408")){ System.out.println("법정공휴일 추석"); return 0; } lunarStr = toLunar(sdf.format((new Date(chkDate.getTime() - 24*60*60*1000)))); if(lunarStr.substring(4).equals("0101")){ System.out.println("법정공휴일 구정 +1"); return 0; }else if(lunarStr.substring(4).equals("0815")){ System.out.println("법정공휴일 추석 +1"); return 0; } lunarStr = toLunar(sdf.format((new Date(chkDate.getTime() + 24*60*60*1000)))); if(lunarStr.substring(4).equals("0101")){ System.out.println("법정공휴일 구정 -1"); return 0; }else if(lunarStr.substring(4).equals("0815")){ System.out.println("법정공휴일 추석 -1"); return 0; } if(chkDate != null){ chkDay = chkDate.getDay(); System.out.println("(0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday)"); System.out.println(chkDay); /* (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) */ if(chkDay == 0 || chkDay == 6){ System.out.println("주말"); return 1; }else{ System.out.println("평일"); return 9; } }else{ System.out.println("평일"); return 9; } } public static String toLunar( String yyyymmdd ) { if( yyyymmdd == null ) return "" ; Calendar cal ; ChineseCalendar cc ; // default TimeZone, Locale 을 사용.. cal = Calendar.getInstance() ; cc = new ChineseCalendar(); String date = yyyymmdd.trim() ; if( date.length() != 8 ) { if( date.length() == 4 ) date = date + "0101" ; else if( date.length() == 6 ) date = date + "01" ; else if( date.length() > 8 ) date = date.substring(0,8) ; else return "" ; } 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() ) ; // ChinessCalendar.YEAR 는 1~60 까지의 값만 가지고 , // ChinessCalendar.EXTENDED_YEAR 는 Calendar.YEAR 값과 2637 만큼의 차이를 가집니다. 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() ; if( y < 1000 ) ret.append( "0" ) ; else if( y < 100 ) ret.append( "00" ) ; else if( y < 10 ) ret.append( "000" ) ; ret.append( y ) ; if( m < 10 ) ret.append( "0" ) ; ret.append( m ) ; if( d < 10 ) ret.append( "0" ) ; ret.append( d ) ; return ret.toString() ; } public static String fromLunar( String yyyymmdd ) { Calendar cal ; ChineseCalendar cc ; // default TimeZone, Locale 을 사용.. cal = Calendar.getInstance() ; cc = new ChineseCalendar(); if (yyyymmdd == null ) return "" ; String date = yyyymmdd.trim() ; if( date.length() != 8 ) { if( date.length() == 4 ) date = date + "0101" ; else if( date.length() == 6 ) date = date + "01" ; else if( date.length() > 8 ) date = date.substring(0,8) ; else return "" ; } 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() ) ; int y = cal.get(Calendar.YEAR) ; int m = cal.get(Calendar.MONTH)+1 ; int d = cal.get(Calendar.DAY_OF_MONTH) ; StringBuffer ret = new StringBuffer() ; if( y < 1000 ) ret.append( "0" ) ; else if( y < 100 ) ret.append( "00" ) ; else if( y < 10 ) ret.append( "000" ) ; ret.append( y ) ; if( m < 10 ) ret.append( "0" ); ret.append( m ) ; if( d < 10 ) ret.append( "0" ); ret.append( d ) ; return ret.toString() ; } }
'Study > Java' 카테고리의 다른 글
java file download 한글 깨짐 현상 해결 (0) | 2014.03.12 |
---|---|
jar 파일 내의 파일 경로 가져오기 (0) | 2014.03.11 |
java SWT browser javascript call and receive (0) | 2014.03.04 |
jdbc SQLException : Already close. (0) | 2013.11.18 |
slf4j cast exception (0) | 2013.10.14 |