Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MySQL
- 자바스크립트
- SpringBoot
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- 파이썬 웹크롤링
- Mapper
- 줄거리
- git
- 한줄평
- JavaScript
- 데이메이커
- Swift
- 클라우드 서비스
- 자바 파일업로드
- 오류
- 클라우드 서비스 특징
- Xcode
- 기록하는 동구
- 콜미동구
- missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
- 서평
- git push
- spring
- java
- Mac
- 동구
- 깃
- 책
- 독후감
- 에러
Archives
- Today
- Total
인생은 속도가 아니라 방향이다
[Java] 두 날짜 사이에 주말 제외한 평일 일수 구하기 본문
반응형
회사에서 해당 기간동안의 근무해야하는 날짜를 알려주는 봇을 만들어보고싶었다.
허점이 있다면 평일에있는 휴일들을 걸러내고 싶어서 다른 라이브러리를 참고했어야지만,,,, 쩝 걍 빠르게 하드코딩하는게 나아보였다. 그래서 주말은 Calendar를 통해서 걸러내고 평일 휴일들은 하드코딩으로 걸러낸다.
결과는 메시지는 이렇게 보이게 만들것이다
일할 일수 17일 | 쉬는 일 수(주말포함) 10일 | 평일 휴일 [2022-02-01 , 2022-02-02]
아래는 결과를 담을 DTO 이다. 참고
@Getter
@ToString
@Builder
public class WorkingDayDTO {
private int workingDays;
private int notWorkingDays;
private List holidayList;
@Override
public String toString() {
String strList = holidayList.stream()
.collect(Collectors.joining(" , ", "[", "]")).toString();
return "일할 일수 " + workingDays + "일 | 쉬는 일 수(주말포함) " + notWorkingDays + "일 | 평일 휴일 " + strList;
}
}
실제 특정 기간안에 주말, 휴일 을 제외하고 일하는 날짜를 가져오는 코드는 다음과 같다.
public static WorkingDayDTO getWorkingDays(String starDate, String endDate) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date dateStartDate = null;
Date dateEndDate = null;
try {
dateStartDate = df.parse(starDate);
dateEndDate = df.parse(endDate);
} catch (ParseException parseException) {
System.out.println(parseException.getStackTrace());
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(dateStartDate);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(dateEndDate);
int workingdays = 0;
int notWorkingdays = 0;
// 평일 휴일 리스트
String month = starDate.substring(5, 7);
List holidayList = getHolidayList(month);
while (cal1.before(cal2)) {
if (Calendar.SATURDAY != cal1.get(Calendar.DAY_OF_WEEK) && (Calendar.SUNDAY != cal1.get(Calendar.DAY_OF_WEEK) && !holidayList.contains(starDate))
) {
workingdays++;
} else {
notWorkingdays++;
}
cal1.add(Calendar.DATE, 1);
starDate = df.format(cal1.getTime());
}
System.out.println("workingdays : " + workingdays);
System.out.println("notWorkingdays : " + notWorkingdays);
WorkingDayDTO workingDayDTO = WorkingDayDTO.builder()
.workingDays(workingdays)
.notWorkingDays(notWorkingdays)
.holidayList(holidayList)
.build();
return workingDayDTO;
}
반복문을 돌면서 하루씩 늘려주면서 반복문을 도는게 핵심이다. 간단!
반응형
'백엔드(Back-end) > Java' 카테고리의 다른 글
[Java] 간단히 mysql 데이터타입을 java 데이터타입과 매칭시켜보자 (1) | 2020.12.21 |
---|---|
[JAVA] Lombok @Getter, @Setter, @EqualsAndHashCode, @Data 자주쓰이는 어노테이션들 (1) | 2020.10.20 |
[Java] Ajax & FormData로 파일 업로드하기② (0) | 2020.02.04 |
[Java] Ajax & FormData로 서버에 파일 업로드하기① (0) | 2020.02.03 |
[Java] Stream 클래스를 알아보자 ② (0) | 2020.01.30 |
Comments