본문 바로가기

Java

[Java] 평일 날짜 수(근무일) 계산

공휴일테이블을 이용하였으며 시작, 종료날짜 사이에 주말, 공휴일 제외한 평일(근무일) 날짜수를 계산하는 소스입니다.

 

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;

public void calculateHoliday() {
	int workDt = 0;
    String startDate = "2020-01-23".replaceAll("-","");	//2020-01-23 (목)
    String endDate = "2020-01-28".replaceAll("-", "");	//2020-01-28 (화)

    //실제 공휴일을 구한다.
    //List<HashMap<String,Object>> holidayList = holidayService.selectNationalHolDtList(holidayVO);
    List<HashMap<String,Object>> holidayList = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> holidayMap = new HashMap<String, Object>();

    holidayMap.put("holidayDt", "20200101");	//신정
    holidayList.add(holidayMap);

    holidayMap = new HashMap<String, Object>();
    holidayMap.put("holidayDt", "20200124");	//설날연휴
    holidayList.add(holidayMap);

    holidayMap = new HashMap<String, Object>();
    holidayMap.put("holidayDt", "20200125");	//설날
    holidayList.add(holidayMap);

    holidayMap = new HashMap<String, Object>();
    holidayMap.put("holidayDt", "20200126");	//설날연휴
    holidayList.add(holidayMap);

    holidayMap = new HashMap<String, Object>();
    holidayMap.put("holidayDt", "20200127");	//대체휴일
    holidayList.add(holidayMap);

    holidayMap = new HashMap<String, Object>();
    holidayMap.put("holidayDt", "20200301");	//삼일절
    holidayList.add(holidayMap);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    try{
		Calendar start = Calendar.getInstance();
        start.setTime(sdf.parse(startDate)); //시작일 날짜 설정

      	Calendar end = Calendar.getInstance();
      	end.setTime(sdf.parse(endDate)); //종료일 날짜 설정

      	Calendar hol = Calendar.getInstance();

		int workingDays = 0;
    	int holDays = 0;
      	while (!start.after(end)) {
      		int day = start.get(Calendar.DAY_OF_WEEK);	 //주말인지 구한다. 1이면 일요일 7이면 토요일
      		int holday = 0; 

      		if ((day != Calendar.SATURDAY) && (day != Calendar.SUNDAY)){
	      		workingDays++;	//평일 수
	      	}
	      	//시작일과 공휴일이 같을때 공휴일이 주말인지 체크한다.
	      	//공휴일이 주말이 아니면 +1
	      	if(!holidayList.isEmpty()){
	      		for(int i=0;i<holidayList.size();i++){
	      		hol.setTime(sdf.parse((String)holidayList.get(i).get("holidayDt").toString()));	//실제 공휴일 날짜 설정
	      		holday = hol.get(Calendar.DAY_OF_WEEK); //주말인지 구한다. 1이면 일요일 7이면 토요일
	      		if (start.equals(hol) &&(holday != Calendar.SATURDAY) && (holday != Calendar.SUNDAY)){	//공휴일수: 공휴일이 평일인경우 +1
		      		holDays++;
		      	}	  
			}
		}
	    start.add(Calendar.DATE, 1);
	}
    System.out.printf("최종일수 %d", workingDays-holDays); //평일 수 - 평일인 공휴일수

    workDt = workingDays-holDays;
			
	}catch(Exception e){
		e.printStackTrace();
	}
}

 

 

 

반응형