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 주어진 요일 이전의 가장 가까운 요일로 조정하고,
현재 날짜가 주어진 요일인 경우 현재 날짜를 반환