閏年等を考慮しだしたら混乱したのでメモ残します。
環境
- 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日
- 1
- 2022/01/01~2022/02/01
- 2
- 1ヵ月 + あまり1日
- 2
開始日 | 終了日 | 差分の月 |
---|---|---|
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 |
ソースコード
- cucumber-sample/Term.java at 0e1ec642bd75816c4dbd6d9e218aad99e2bb2efb · hirotoKirimaru/cucumber-sample · GitHub
- cucumber-sample/TermTest.java at 0e1ec642bd75816c4dbd6d9e218aad99e2bb2efb · hirotoKirimaru/cucumber-sample · GitHub
終わりに
「暦上の1ヵ月」を意識して計算しなければならない、と考えていたので、単純な計算ができていませんでした。時間計算難しいです。