Java/Java 문법

[JAVA] 그 날의 주차 구하기 (week of day)

민돌v 2023. 1. 12. 20:10

 

저는 일관성 있는 데이터를 저장하기위해서, 주 간 어떤날을 입력하든 그 주의 특정 요일 날짜를 반환하는 로직이 필요했습니다.

이에 대한 해답을 자바 8 이후로 나온 날짜및 시간 작업 라이브러리 중, TemporalAdjuster 와 DayOfWeek Enum 클래스를 사용하였습니다.

 

Code

public final class DateUtil {

    private final LocalDate date;

    public static DateUtil of(final LocalDate date) {
        return new DateUtil(date);
    }

    public int getCompareDayOfWeekNumber(final DayOfWeek dayOfWeek) {
        return dayOfWeek.getValue() - date.getDayOfWeek().getValue();
    }

    public LocalDate convertWeeklyFridayDate() {
        return date.plusDays(this.getCompareDayOfWeekNumber(DayOfWeek.FRIDAY));
    }
}

 

 

 

Test Code

@ParameterizedTest
@ValueSource(ints = {2,3,4,5,6,7,8})
@DisplayName("그 주의 금요일 날짜 반환")
void convertWeeklyFridayDate(final int day) {

    LocalDate friday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY));

    LocalDate date = LocalDate.of(2023, 1, day);

    assertThat(DateUtil.of(date).convertWeeklyFridayDate()).isEqualTo(friday);
}

 

TemporalAdjuster

TemporalAdjuster 를 사용하면 복잡한 날짜 조작을 수행할 수 있습니다. 예를 들어 , 다음 일요일, 이번 달의 마지막 날 또는 다음 해의 첫날 날짜를 얻을 수 있습니다.

  • dayOfWeekInMonth() – 서수 요일 조정기. 예를 들어 3월 두 번째 화요일의 날짜
  • firstDayOfMonth() – 현재 달의 첫 번째 날짜에 대한 조정기
  • firstDayOfNextMonth() – 다음 달의 1일 날짜 조정기
  • firstDayOfNextYear() – 다음 연도의 첫 날 날짜 조정기
  • firstDayOfYear() – 현재 연도의 첫 날 날짜 조정기
  • lastDayOfMonth() – 현재 달의 마지막 날 날짜 조정기
  • nextOrSame() – 오늘이 필수 요일과 일치하는 경우 특정 요일 또는 같은 요일의 다음 발생 날짜에 대한 조정기

 

 

→ 8일(일) 9일(월) 요일로 넘어가자, 그 주의 금요일이로 데이터가 정상적으로 바뀌어서 처리되는 것을 확인하였습니다.

 

이렇게해서 오늘, 이번 주의 특정 요일 날짜를 구해보았습니당!

 

 

 

 


*참고

https://www.baeldung.com/java-temporal-adjuster