TemporalAdjusters 는 Java 8 이상에서 제공하는 날짜 조정 유틸리티로, LocalDate 등 날짜 객체를 쉽게 변환하거나 맞춤 조정할 수 있도록 도와주는 기능임.
TemporalAdjusters – 날짜를 손쉽게 조정하는 자바 유틸리티
TemporalAdjusters 는 Java 8+ java.time.temporal 패키지에 포함된 클래스이며,
날짜를 특정 기준(예: 다음 달 첫째 날, 이번 달 마지막 날, 특정 요일 등)으로 조정하는 기능을 제공함.
1. 언제 사용하는가?
- 복잡한 날짜 계산 로직을 간결하게 구현하고 싶을 때
- 매달 첫날, 마지막 날 계산
- 특정 요일(예: 이번 달 둘째 화요일 등) 구하기
- 다음 영업일, 특정 조건의 날짜 구하기
→ if문, Calendar 복잡한 코드 없이 선언적으로 날짜 조정 가능함
2. 사용 예시
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;
LocalDate today = LocalDate.of(2025, 5, 21); // 수요일
// 이번 달의 마지막 날
LocalDate lastDay = today.with(TemporalAdjusters.lastDayOfMonth()); // 2025-05-31
// 다음 월요일
LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); // 2025-05-26
// 이번 달 첫 번째 일요일
LocalDate firstSunday = today.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)); // 2025-05-04
3. 주요 TemporalAdjusters 메서드 정리
메서드 | 설명 |
firstDayOfMonth() | 해당 월의 첫 날 |
lastDayOfMonth() | 해당 월의 마지막 날 |
firstDayOfNextMonth() | 다음 달의 첫 날 |
firstDayOfYear() | 해당 해의 첫 날 |
lastDayOfYear() | 해당 해의 마지막 날 |
firstInMonth(DayOfWeek) | 해당 월의 첫 특정 요일 |
lastInMonth(DayOfWeek) | 해당 월의 마지막 특정 요일 |
next(DayOfWeek) | 다음 특정 요일 (자기 자신 제외) |
nextOrSame(DayOfWeek) | 다음 특정 요일 (자기 자신 포함) |
previous(DayOfWeek) | 이전 특정 요일 (자기 자신 제외) |
previousOrSame(DayOfWeek) | 이전 특정 요일 (자기 자신 포함) |
4. 사용자 정의 TemporalAdjuster 만들기
필요에 따라 직접 커스텀 날짜 조정 규칙을 만들 수도 있음:
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.Temporal;
import java.time.LocalDate;
TemporalAdjuster nextEvenDay = temporal -> {
LocalDate date = LocalDate.from(temporal);
return date.getDayOfMonth() % 2 == 0 ? date.plusDays(2) : date.plusDays(1);
};
LocalDate result = LocalDate.of(2025, 5, 21).with(nextEvenDay); // 2025-05-22
5. 실무 사용 예
예시 | 설명 |
급여일 계산 | 매월 마지막 평일 or 특정 요일 |
스케줄 시작일 | 다음 주 월요일부터 시작 |
달력 UI용 날짜 정렬 | 해당 달 첫 주 일요일부터 정렬 |
정기 결제일 계산 | 매달 둘째 수요일 등 정기 이벤트 기준 설정 |
6. TemporalAdjusters 와 DateTimeFormatter 조합
LocalDate nextFriday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
String formatted = nextFriday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
→ 날짜 조정 후 포맷까지 깔끔하게 처리 가능
정리
TemporalAdjusters 는 LocalDate 등 날짜 객체를
월의 시작일, 마지막 날, 특정 요일 등으로 손쉽게 조정할 수 있게 해주는 유틸리티 클래스임.
복잡한 로직 없이 선언형으로 날짜를 다룰 수 있으며,
급여일, 스케줄 계산, 반복 이벤트 처리 등 실무에서도 매우 유용함.
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
date.format() (0) | 2025.05.28 |
---|---|
DateTimeFormatter.ofPattern (0) | 2025.05.27 |
chronofield (0) | 2025.05.25 |
chronounit (0) | 2025.05.24 |
BiConsumer (0) | 2025.05.18 |