Java8에서 날짜 차이 계산하기

Java8의 java.time 패키지에 새롭게 추가된 LocalDate 클래스 사용시, until(ChronoLocalDate endDate)메소드를 사용하면 두 날짜사이의 기간(Period)을 구할수 있습니다. 리턴 받은 Period 객체의 getYears(), getMonths(), getDays() 메소드를 호출하면 년도 차이, 달 차이, 일 차이를 알 수 있습니다.

1
2
3
4
5
6
7
8
9
LocalDate today = LocalDate.now();
LocalDate hiredDate = LocalDate.of(2015, 6, 29);
// 입사일로부터 오늘까지의 날짜 차이 계산
Period period = hiredDate.until(today);
System.out.println(period.getYears()); // 2년
System.out.println(period.getMonths()); // 3개월
System.out.println(period.getDays()); // 21일

여기서 주의해야할 점이 있는데, period 객체의 getDays() 메소드는 2년 3개월을 뺀 나머지인 21일이 리턴되는 것이지 기간 전체의 일 수 차이가 리턴되는 것이 아닙니다. (getYears(), getMonths() 도 마찬가지입니다.)

두 날짜간 전체 일 수 차이를 구하려면 ChronoUnit 클래스의 between() 메소드를 사용하면 됩니다.
ChronoUnit 클래스는 enum 클래스이며 기간 단위별로 enum 타입이 정의되어 있습니다.

  • ChronoUnit.YEARS : 년
  • ChronoUnit.MONTHS : 월
  • ChronoUnit.WEEKS : 주
  • ChronoUnit.DAYS : 일
  • ChronoUnit.HOURS : 시간

두 날짜간 전체 일 수를 구하려면 다음과 같이 사용합니다.

1
2
long days = ChronoUnit.DAYS.between(hiredDate, today);
System.out.println(days); // 884일

이런식으로 ChronoUnit 클래스의 between() 메소드를 사용하면 년도 차이, 월 차이, 주 차이.. 등을 구할 수 있습니다.

Share