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일(월) 요일로 넘어가자, 그 주의 금요일이로 데이터가 정상적으로 바뀌어서 처리되는 것을 확인하였습니다.
이렇게해서 오늘, 이번 주의 특정 요일 날짜를 구해보았습니당!
*참고