Java

날짜 계산 - TemporalAdjusters

hwanguu 2023. 9. 11. 16:27

TemporalAdjusters클래스는 자주 쓰일만한 날짜 계산들을 대신 해주는 머서드를 정의해놓은 클래스 이다.

예를 들어 이번 달의 3번째 금요일은 며칠일까?

다음주 월요일은 며칠일까?

 

유용한 메서드

메서드 인자 설명
firstDayOfNextYear() void 다음 해의 첫 날
firstDayOfNextMonth() void 다음 달의 첫 날
firstDayOfYear() void 올 해의 첫 날
firstDayOfMonth() void 이번 달의 첫 날
lastDayOfYear() void 올 해의 마지막 날
lastDayOfMonth() void 이번 달의 마지막 날
FirstInMonth(DayOfWeek dayOfWeek) DayOfWeek 이번 달의 첫 번째 (?)요일
LastInMonth(DayOfWeek dayOfWeek) DayOfWeek 이번 달의 마지막 (?)요일
previous(DayOfWeek dayOfWeek) DayOfWeek 지난 (?)요일(당일 미포함)
previousOrSame(DayOfWeek dayOfWeek) DayOfWeek 지난 (?)요일(당일 포함)
next(DayOfWeek dayOfWeek) DayOfWeek 다음 (?)요일(당일 미포함)
nextOrSame(DayOfWeek dayOfWeek) DayOfWeek 다음 (?)요일(당일 포함)
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek) DayOfWeek 이번 달의 n번째 ?요일

 

위의 유용한 메서드를 사용해보자! LocalTime, LocalDateTime, LocalDate, ZonedDateTime, Instant에 정의된 with()를 이용한다.

 

public static void main(String[] args) {
        LocalDate now = LocalDate.now();

        print("now", now);
        print("firstDayOfNextMonth(다음 달의 첫 날)", now.with(TemporalAdjusters.firstDayOfNextMonth()));
        print("firstDayOfMonth(이 달의 첫 날)", now.with(TemporalAdjusters.firstDayOfMonth()));
        print("lastDayOfMonth(이 달의 마지막 날)", now.with(TemporalAdjusters.lastDayOfMonth()));
        print("firstInMonth(이 달의 첫번째 월요일)", now.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
        print("lastInMonth(이 달의 마지막 금요일)", now.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
        print("previous(지난 주 월요일(오늘 미포함))", now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
        print("previousOrSame(지난 주 월요일(오늘 포함))", now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)));
        print("next(다음 주 월요일(오늘 미포함))", now.with(TemporalAdjusters.next(DayOfWeek.MONDAY)));
        print("nextOrSame(다음 주 월요일(오늘 포함))", now.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY)));
        print("dayOfWeekInMonth(이 달의 4번째 화요일)", now.with(TemporalAdjusters.dayOfWeekInMonth(4, DayOfWeek.TUESDAY)));
    }

    public static void print(String str, Object obj) {
        System.out.println(str + " : " + obj);
    }

결과 (실행한날 2023-09-11 월요일)

now : 2023-09-11
firstDayOfNextMonth(다음 달의 첫 날) : 2023-10-01
firstDayOfMonth(이 달의 첫 날) : 2023-09-01
lastDayOfMonth(이 달의 마지막 날) : 2023-09-30
firstInMonth(이 달의 첫번째 월요일) : 2023-09-04
lastInMonth(이 달의 마지막 금요일) : 2023-09-29
previous(지난 주 월요일(오늘 미포함)) : 2023-09-04
previousOrSame(지난 주 월요일(오늘 포함)) : 2023-09-11
next(다음 주 월요일(오늘 미포함)) : 2023-09-18
nextOrSame(다음 주 월요일(오늘 포함)) : 2023-09-11
dayOfWeekInMonth(이 달의 4번째 화요일) : 2023-10-03

 

 

 

References

Java의 정석, 남궁 성 지음

'Java' 카테고리의 다른 글

날짜와 시간 - parse  (0) 2023.09.11
날짜와 시간 - DateTimeFormatter  (0) 2023.09.11
날짜와 시간 - LocalDateTime, ZonedDateTIme  (0) 2023.09.11
제네릭스  (0) 2023.09.06
Java Collection Set  (0) 2023.08.24