Java/Kotlin - LocalDate 의 compareTo와 ChronoUnit

조갱·2022년 7월 3일
0

kotlin

목록 보기
6/10

배경

두 날짜 사이의 간격을 구해야 했다.

compareTo() 는 0보다 크다, 같다, 작다 로 대소비교를 해야한다는 사실은 알고있었지만,
'왜 1, 0, -1같이 특정한 값이 아닌 대소비교를 해야할까?'라는 생각을 하며,
'그러면 compareTo()는 언제 1, 0, -1이 아닌 다른 값 (2, 5, -7 등)을 반환할까?'
는 생각이 들어서 실험해보기로 했다.

잘못된 방법 (compareTo)

우선, day만 다르게 해서 실험해봤다.

@Test
fun `두 날짜 사이의 차이`(){
    val date1 = LocalDate.of(2022,6,19)
    val date2 = LocalDate.of(2022,6,15)

    assertEquals(4, date1.compareTo(date2))
    assertEquals(-4, date2.compareTo(date1))
}

결과는 테스트 성공이었다.

이제 year까지 다르게 해서 테스트해봤다.
결과는 테스트 실패였다.

day는 기대값과 일치하지만, 왜 year는 -1을 반환했을까?
DateTime의 compareTo() 를 파헤쳐 그 이유를 알 수 있었다.

int compareTo(LocalDate otherDate) {...}

구문을 보면,

와 같이 진행되기 때문에
day의 차이인 4, -4는 정상적으로 반환됐고,
year는 yeat의 차이인 -1이 반환됐음을 알 수 있다.

올바른 방법 (ChronoUnit)

그래서 두 날짜 사이의 차이를 어떻게 구할 수 있을까?

ChronoUnit.DAYS.between(LocalDate, LocalDate) 을 사용하여 두 날짜의 차이를 구할 수 있다.

profile
A fast learner.

0개의 댓글