BE/Java

temporalAdjusters

baek-dev 2025. 5. 26. 14:11

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