두 날짜 사이의 간격을 구해야 했다.
compareTo()
는 0보다 크다, 같다, 작다 로 대소비교를 해야한다는 사실은 알고있었지만,
'왜 1, 0, -1같이 특정한 값이 아닌 대소비교를 해야할까?'라는 생각을 하며,
'그러면 compareTo()는 언제 1, 0, -1이 아닌 다른 값 (2, 5, -7 등)을 반환할까?'
는 생각이 들어서 실험해보기로 했다.
우선, 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.DAYS.between(LocalDate, LocalDate)
을 사용하여 두 날짜의 차이를 구할 수 있다.