저는 일관성 있는 데이터를 저장하기위해서, 주 간 어떤날을 입력하든 그 주의 특정 요일 날짜를 반환하는 로직이 필요했습니다.
이에 대한 해답을 자바 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일(월) 요일로 넘어가자, 그 주의 금요일이로 데이터가 정상적으로 바뀌어서 처리되는 것을 확인하였습니다.
이렇게해서 오늘, 이번 주의 특정 요일 날짜를 구해보았습니당!
*참고
'Java > Java 문법' 카테고리의 다른 글
[Java] Double to Long 형 변환 (1) | 2022.12.27 |
---|---|
[JAVA] 지역변수 vs 전역변수 (feat. java8 JVM Static Object Heap Area) (0) | 2022.09.26 |
추상클래스의 객체 생성 (추상클래스 인스턴스) - 추상클래스를 사용하는 이유 (0) | 2022.09.19 |
[Java] 스트림에서 오토박싱 (박싱, 언방식)이 일어나는 이유 (0) | 2022.09.16 |
[JAVA] record 불변 객체 타입 (feat Lombok @Value) (0) | 2022.06.02 |