공휴일테이블을 이용하였으며 시작, 종료날짜 사이에 주말, 공휴일 제외한 평일(근무일) 날짜수를 계산하는 소스입니다.
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();
}
}
반응형
'Java' 카테고리의 다른 글
Maven 라이브러리 export 하기 (0) | 2023.07.19 |
---|---|
[Java] SFTP 파일 업로드, 다운로드 예제 (jsch) (1) | 2022.12.19 |
[Java] SHA-256 암호화 예제 (0) | 2020.02.05 |
[Mybatis] mapUnderscoreToCamelCase 설정 (0) | 2019.05.14 |
[Java] java.security.InvalidKeyException: Illegal key size 해결 방안(자바 암호화 모듈 JEC) (1) | 2019.01.08 |