きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Javaで日付の差が何ヵ月かを計算する。あまりは切り上げる (LocalDate, ChronoUnit)

閏年等を考慮しだしたら混乱したのでメモ残します。

環境

  • Java
    • 17

対応

対応自体は簡単で、ChronoUnit.MONTHESで月の差分を取得できます。今回は、1ヵ月に満たない日付がある場合は切り上げるので+1するだけです。

LocalDate start;
LocalDate end;
ChronoUnit.MONTHS.between(start, end) + 1;

テストケース

下のことに気付けていれば、うるう日を考慮して網羅的にテストする必要はありません。

  • 2022/01/01~2022/01/31
    • 1
      • 0ヵ月 + あまり30日
  • 2022/01/01~2022/02/01
    • 2
      • 1ヵ月 + あまり1日
開始日 終了日 差分の月
2020-01-01 2020-01-15 1
2020-01-01 2020-01-31 1
2020-01-01 2020-02-01 2
2020-01-15 2020-02-10 1
2020-01-01 2020-12-31 12
2020-01-01 2021-12-31 24
2020-02-29 2021-02-28 12
2019-02-28 2020-02-29 13
2020-02-29 2024-02-28 48
2020-02-29 2024-02-29 49
2020-02-01 2020-02-28 1
2020-02-01 2020-02-29 1

ソースコード

終わりに

「暦上の1ヵ月」を意識して計算しなければならない、と考えていたので、単純な計算ができていませんでした。時間計算難しいです。

類似記事