[Java] 📅 Java로 영업일만 7일 출력하는 함수 만들기
- 📕 Programing/Java
- 2025. 6. 23.
반응형
📅 Java로 영업일만 7일 출력하는 함수 만들기
비즈니스 로직을 개발하다 보면 주말과 공휴일을 제외한 영업일만 필요한 경우가 많습니다. 오늘은 Java에서 현재 날짜 기준으로 영업일만 7일을 출력하는 함수를 만들어보겠습니다! 🚀
🎯 요구사항
- 현재 날짜 기준으로 7일 전까지의 날짜 출력
- 날짜 형식: 2025-01-01
- 주말(토, 일) 제외
- 공휴일 제외
💡 핵심 기능
1️⃣ 영업일 체크 로직
/**
* 해당 날짜가 영업일인지 확인 (주말과 공휴일 제외)
*/
private static boolean isBusinessDay(LocalDate date) {
return !isWeekend(date) && !isHoliday(date);
}
2️⃣ 주말 체크
private static boolean isWeekend(LocalDate date) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY;
}
3️⃣ 공휴일 체크 (고정 공휴일)
private static boolean isHoliday(LocalDate date) {
int month = date.getMonthValue();
int day = date.getDayOfMonth();
switch (month) {
case 1: return day == 1; // 신정 🎊
case 3: return day == 1; // 삼일절 🇰🇷
case 5: return day == 5; // 어린이날 👶
case 6: return day == 6; // 현충일 🕊️
case 8: return day == 15; // 광복절 🇰🇷
case 10: return day == 3 || day == 9; // 개천절, 한글날 📚
case 12: return day == 25; // 크리스마스 🎄
default: return false;
}
}
🔧 주요 메서드들
📊 영업일 7일 출력
public static void printLast7BusinessDays() {
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println("현재 날짜 기준 영업일만 7일:");
int count = 0;
int daysBack = 0;
while (count < 7) {
LocalDate date = currentDate.minusDays(daysBack);
if (isBusinessDay(date)) {
System.out.println(date.format(formatter) + " (" + getDayOfWeekKorean(date) + ")");
count++;
}
daysBack++;
}
}
📋 리스트로 반환
public static List<String> getLast7BusinessDays() {
// 영업일만 7일을 List<String>으로 반환
}
📆 특정 날짜 기준
public static void printLast7BusinessDaysFromDate(LocalDate baseDate) {
// 특정 날짜를 기준으로 영업일 7일 출력
}
🎨 실행 결과 예시
현재 날짜 기준 영업일만 7일:
2025-06-23 (월)
2025-06-20 (금)
2025-06-19 (목)
2025-06-18 (수)
2025-06-17 (화)
2025-06-16 (월)
2025-06-13 (금)
⚠️ 주의사항
🌙 음력 공휴일 미처리
현재 코드는 고정 공휴일만 처리합니다. 다음 공휴일들은 음력 기준이므로 별도 처리가 필요해요:
- 설날 🧧
- 부처님오신날 🪷
- 추석 🌕
🔄 연도별 호환성
이전 버전에서는 2025년 공휴일만 하드코딩되어 있었지만, 현재 버전은 모든 연도에서 사용 가능합니다! ✨
🚀 사용 방법
public static void main(String[] args) {
// 1. 현재 날짜 기준 영업일 7일 출력
printLast7BusinessDays();
// 2. 리스트로 받아서 처리
List<String> businessDates = getLast7BusinessDays();
businessDates.forEach(System.out::println);
// 3. 특정 날짜 기준으로 출력
LocalDate specificDate = LocalDate.of(2024, 12, 31);
printLast7BusinessDaysFromDate(specificDate);
}
🔮 최종 코드
package com.kyhslam.mlb;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.DayOfWeek;
import java.util.ArrayList;
import java.util.List;
/**
* 현재 날짜 기준으로 7일 이전의 날짜들을 출력
*/
public class DatePrinter_01 {
/**
* 해당 날짜가 고정 공휴일인지 확인
* @param date 확인할 날짜
* @return 공휴일이면 true, 아니면 false
*/
private static boolean isHoliday(LocalDate date) {
int month = date.getMonthValue();
int day = date.getDayOfMonth();
// 고정 공휴일 체크
switch (month) {
case 1:
return day == 1; // 신정
case 3:
return day == 1; // 삼일절
case 5:
return day == 5; // 어린이날
case 6:
return day == 6; // 현충일
case 8:
return day == 15; // 광복절
case 10:
return day == 3 || day == 9; // 개천절, 한글날
case 12:
return day == 25; // 크리스마스
default:
return false;
}
// 참고: 실제로는 설날, 부처님오신날, 추석은 음력 기준이므로
// 정확한 계산을 위해서는 음력-양력 변환 라이브러리가 필요합니다.
// 현재는 고정 공휴일만 처리하고 있습니다.
}
/**
* 해당 날짜가 주말인지 확인
* @param date 확인할 날짜
* @return 주말이면 true, 아니면 false
*/
private static boolean isWeekend(LocalDate date) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY;
}
/**
* 해당 날짜가 영업일인지 확인 (주말과 공휴일 제외)
* @param date 확인할 날짜
* @return 영업일이면 true, 아니면 false
*/
private static boolean isBusinessDay(LocalDate date) {
return !isWeekend(date) && !isHoliday(date);
}
/**
* 현재 날짜 기준으로 영업일만 7일 출력하는 함수 (주말, 공휴일 제외)
*/
public static void printLast7BusinessDays() {
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println("현재 날짜 기준 영업일만 7일:");
int count = 0;
int daysBack = 0;
while (count < 7) {
LocalDate date = currentDate.minusDays(daysBack);
if (isBusinessDay(date)) {
System.out.println(date.format(formatter) + " (" + getDayOfWeekKorean(date) + ")");
count++;
}
daysBack++;
}
}
/**
* 현재 날짜 기준으로 영업일만 7일을 리스트로 반환하는 함수
* @return 영업일 날짜 문자열 리스트
*/
public static List<String> getLast7BusinessDays() {
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<String> businessDates = new ArrayList<>();
int count = 0;
int daysBack = 0;
while (count < 7) {
LocalDate date = currentDate.minusDays(daysBack);
if (isBusinessDay(date)) {
businessDates.add(date.format(formatter));
count++;
}
daysBack++;
}
return businessDates;
}
/**
* 특정 날짜 기준으로 영업일만 7일 출력하는 함수
* @param baseDate 기준이 되는 날짜
*/
public static void printLast7BusinessDaysFromDate(LocalDate baseDate) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println(baseDate.format(formatter) + " 기준 영업일만 7일:");
int count = 0;
int daysBack = 0;
while (count < 7) {
LocalDate date = baseDate.minusDays(daysBack);
if (isBusinessDay(date)) {
System.out.println(date.format(formatter) + " (" + getDayOfWeekKorean(date) + ")");
count++;
}
daysBack++;
}
}
/**
* 요일을 한국어로 반환
* @param date 날짜
* @return 한국어 요일
*/
private static String getDayOfWeekKorean(LocalDate date) {
switch (date.getDayOfWeek()) {
case MONDAY: return "월";
case TUESDAY: return "화";
case WEDNESDAY: return "수";
case THURSDAY: return "목";
case FRIDAY: return "금";
case SATURDAY: return "토";
case SUNDAY: return "일";
default: return "";
}
}
// 테스트용 메인 메서드
public static void main(String[] args) {
// 현재 날짜 기준으로 영업일만 7일 출력
printLast7BusinessDays();
System.out.println("\n" + "=".repeat(40) + "\n");
// 리스트로 받아서 처리
List<String> businessDates = getLast7BusinessDays();
System.out.println("리스트로 반환된 영업일 날짜들:");
businessDates.forEach(System.out::println);
System.out.println("\n" + "=".repeat(40) + "\n");
// 다른 연도 테스트 (2024년)
LocalDate date2024 = LocalDate.of(2024, 12, 31);
printLast7BusinessDaysFromDate(date2024);
System.out.println("\n" + "=".repeat(40) + "\n");
// 다른 연도 테스트 (2026년)
LocalDate date2026 = LocalDate.of(2026, 3, 15);
printLast7BusinessDaysFromDate(date2026);
System.out.println("\n" + "=".repeat(40) + "\n");
// 오늘이 영업일인지 확인
LocalDate today = LocalDate.now();
System.out.println("오늘(" + today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ")은 " +
(isBusinessDay(today) ? "영업일입니다." : "영업일이 아닙니다."));
System.out.println("\n참고: 현재 고정 공휴일만 처리됩니다.");
System.out.println("(신정, 삼일절, 어린이날, 현충일, 광복절, 개천절, 한글날, 크리스마스)");
System.out.println("설날, 부처님오신날, 추석 등 음력 공휴일은 별도 처리가 필요합니다.");
}
}
반응형
'📕 Programing > Java' 카테고리의 다른 글
| [Java] Java로 다른 서버 API 호출하기 (1) | 2025.08.28 |
|---|---|
| ⏱ Spring Boot에서 함수 수행시간 측정하기 – 초/분 단위 출력 (1) | 2025.07.03 |
| ✅ Java 문자열을 | 기준으로 나누어 List로 변환하는 방법 (1) | 2025.06.18 |
| 윈도우에서 폴더를 다른 위치로 연결하는 방법 – mklink 명령어 활용하기 (0) | 2025.06.11 |
| [Java] 문자열을 "-"로 구분하여 List로 변환하기 (0) | 2025.05.28 |