[JAVA] 휴일 알아내기

JAVA 2021. 6. 25. 13:41

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() ;
}
}

'JAVA' 카테고리의 다른 글

[JAVA] PathVariable  (0) 2022.05.23
[JAVA] Object Array  (0) 2022.05.23
multipart/form-data 인지 체크, MultipartRequestWrapper 상속해서 수정  (2) 2019.04.09
multipart 파일체크  (4) 2019.04.09
multipart 파라미터 받기  (0) 2019.02.28
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,