Java Date - 날짜와 시간 조정하기
날짜와 시간 조정에는 with() 메소드가 사용한다.
테스트 용도로 LocalDateTime 객체를 만들어준다.
LocalDateTime dt = LocalDateTime.of(2025, 8, 22, 14, 29, 39);
System.out.println(dt);
2025-08-22T14:29:39
with - 연도 변경하기
LocalDateTime changeYear = dt.with(ChronoField.YEAR, 2035);
System.out.println(changeYear);
2035-08-22T14:29:39
2025 년이 2035년으로 변경한 것을 볼 수 있다. 이처럼 ChronoField 필드 열거형을 사용하여 변경하고 싶은 연도 및 날짜 시간을 변경할 수 있다.
withYear - 편의 메소드
LocalDateTime changeYear = dt.withYear(2023);
System.out.println(changeYear);
2023-08-22T14:29:39
with 메소드도 편의 메소드를 제공한다.
TemporalAdjusters 사용하기
날짜를 복잡하게 계산할 때 사용한다.
예를 들어, 다음 주를 출력하고 싶은 경우에 사용한다.
next - 다음으로 반환하기
LocalDateTime changeWith = dt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
System.out.println("현재 날짜: " + dt);
System.out.println("다음주 금요일: " + changeWith);
현재 날짜: 2025-08-22T14:29:39
다음주 금요일: 2025-08-29T14:29:39
다음 주 금요일 표시는 복잡한 계산을 요구한다. 그러나 자바에서는 이 복잡한 과정을 TemporalAdjusters.next 사용하는 것만으로 구현할 수 있다.
lastInMonth - 이번 달의 마지막 주일
이번 달 마지막 날짜는 쉽게 맞출 수 있지만 추가로 이번 달의 월요일은 몇 요일인가요? 했을때 구현하는 입장에서는 어렵지만 이것도 TemporalAdjusters 클래스 사용으로 쉽게 구현할 수 있다.
LocalDateTime changeWith = dt.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.println("현재 날짜: " + dt);
System.out.println("이번달 마지막 일요일: " + changeWith);
현재 날짜: 2025-08-22T14:29:39
이번달 마지막 일요일: 2025-08-31T14:29:39
8월의 마지막달의 일요일은 2025-08-31 일이다.
DayOfWeek 열거형
월, 화, 수, 목, 금, 토, 일을 나타내는 열거형이다.
TemporalAdjusters 클래스가 제공하는 주요 기능
메소드 | 설명 |
dayOfWeekInMonth | 주어진 요일이 몇 번째인지 따라 날짜를 조정 |
firstDayOfMonth | 해당 월의 첫째 날로 조정 |
firstDayOfNextMonth | 다음 달의 첫째 날로 조정 |
firstDayOfNextYear | 다음 해의 첫째 날로 조정 |
firstDayOfYear | 주어진 해의 첫째 날로 조정 |
firsyInMonth | 주어진 요일 중 해당 월의 첫 번째 요일로 조정 | lastDayOfMonth | 해당 월의 마지막 날로 조정 |
lastDayOfNextMonth | 다음 달의 마지막 날로 조정 |
lastDayOfNextYear | 다음 해의 마지막 날로 조정 |
lastDayOfYear | 주어진 해의 마지막 날로 조정 |
lastInMonth | 주어진 요일 중 해당 월의 마지막 요일로 조정 |
next | 주어진 요일 이후의 가장 가까운 요일로 조정 |
nextOrSame | 주어진 요일 이후의 가장 가까운 요일로 조정하고, 현재 날짜가 주어진 요일인 경우 현재 날짜를 반환 |
previous | 주어진 요일 이전의 가장 가까운 요일로 조정 |
previousOrSame | 주어진 요일 이전의 가장 가까운 요일로 조정하고, 현재 날짜가 주어진 요일인 경우 현재 날짜를 반환 |