Study/Java

[JAVA] Working Day JAVA Source(ICU LIBRARY 사용)

LoonyHyun 2013. 3. 13. 14:35
반응형

Working Day API 찾다가 없어서 만든 java source


그래도 음력 관련 LIBRARY는 있어서 사용하였습니다.


ICU(International Components for Unicode) : https://sites.google.com/site/icusite/

icu4j-4_8_1_1.jar


출처 : 까칠한 수 (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일 (크리스마스)
**/
		ArrayList chkArray = 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() ;
	}
}