준호씨의 블로그
Java - "x개월 x일 남았습니다" 구하기 본문
보통 D-Day는 종종 구할 일이 있고 예제도 많습니다. 하지만 D-Day를 다르게 표현하는 "x개월 x일 남았습니다"는 예제를 찾기 힘듭니다. 개월 수 차이 구하는 예제도 많던데 이상하게도 몇 개월 며칠은 보이지 않더군요. 최근에 몇 개월 며칠 남았지 구하는 로직을 만 들일이 있어서 만들면서 정리해 보았습니다.
아참 Java8 이상을 사용하셔야 됩니다. 이전 버전에서도 구하는 방법은 있겠지만 Java8을 쓰면 정말 쉽게 구할 수 있기 때문입니다. 요즘 다들 Java8 이상 사용하고 계시죠? ^^;
정답부터 적어보면 다음과 같습니다.
LocalDate theDate = LocalDate.of(2030, 4, 1);
Period period = LocalDate.now().until(theDate);
System.out.println(period.getYears() * 12 + period.getMonths() + "개월");
System.out.println(period.getDays() + "일");
2020년 4월 1일 까지 120개월 15일 남았네요. 참 쉽죠?
Java8부터 LocalDate클래스가 등장합니다. (참고: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) LocalDate가 생기고 각종 날짜 계산이 많이 편해졌습니다. LocalDate의 until 함수가 반환하는 Period는 남은 기간들을 쉽게 추출해낼 수 있습니다.
오늘이 아니고 특정일을 기준으로 몇개월 며칠 남았는지 확인하려면 다음과 같이 하면 됩니다.
LocalDate startDate = LocalDate.of(2020, 3, 17);
LocalDate endDate = LocalDate.of(2030, 4, 1);
Period period = startDate.until(endDate);
assertThat(period.getYears() * 12 + period.getMonths()).isEqualTo(120);
assertThat(period.getDays()).isEqualTo(15);
여기서 남은 년을 추가하고 싶을 수 있습니다. 남은 년, 개월, 일은 어떻게 구할까요? 위의 예제를 보고 금방 눈치챘으리라 봅니다. 더 쉽습니다.
LocalDate startDate = LocalDate.of(2020, 3, 17);
LocalDate endDate = LocalDate.of(2030, 4, 1);
Period period = startDate.until(endDate);
assertThat(period.getYears()).isEqualTo(10);
assertThat(period.getMonths()).isEqualTo(0);
assertThat(period.getDays()).isEqualTo(15);
남은 개월, 일 구할 때 실수하기 좋은게 getYears() * 12를 빼먹게 되면 몇 년 치에 해당하는 개월 수가 누락될 수 있으니 주의해야 합니다. (사실 제가 이 실수를 했었습니다. 글로 정리하다가 갑자기 떠올랐네요.)
'개발이야기' 카테고리의 다른 글
Oracle - 버전 확인 방법. 버전 5자리 의미. (0) | 2020.03.21 |
---|---|
Java - "x개월 x일 남았습니다" 구하기2. oracle months_between (0) | 2020.03.20 |
OSX - cpan DBD::mysql (0) | 2020.03.05 |
OSX - cpan DBD::Oracle (0) | 2020.03.05 |
정원사들 시즌5 시작. 일일커밋 (0) | 2020.03.04 |