LoginSignup
2
1

More than 3 years have passed since last update.

Java 月末のplusMonths

Posted at

月末に対してplusMonthsとどうなるの?

2月には31日は存在しませんが、1/31にplusMonths()で1ヶ月を加算した場合はどうなるか気になり調べてみました。

ドキュメントによると

このメソッドは、3つの手順で、指定された量を月フィールドに加算します。
1. 入力された月数を、月フィールドに加算します
2. 結果となる日付が無効になるかどうかをチェックします
3. 必要に応じて、「月の日」を最後の有効な日に調整します
たとえば、2007-03-31に1月を加算すると、2007-04-31という無効な日付が生じます。無効な結果を返す代わりに、その月の最後の有効な日である2007-04-30が選択されます。

まずは月を足して、足した月に該当する日付があるかどうかチェックします。該当する日付がない場合は、月の最終日を返すようです。

確認

LocalDate date = LocalDate.of(2020,1,31);
System.out.println(date.plusMonths(1));
// 2020-02-29

LocalDate date = LocalDate.of(2020,1,30);
System.out.println(date.plusMonths(1));
// 2020-02-29

LocalDate date = LocalDate.of(2020,1,29);
System.out.println(date.plusMonths(1));
// 2020-02-29

LocalDate date = LocalDate.of(2020,1,28);
System.out.println(date.plusMonths(1));
// 2020-02-28

該当しない日付に対しては、有効な日付が戻ってきてますね:clap:

余談

plusMonthsの後にminusMonthsしたらどうなるのでしょうか?

LocalDate date = LocalDate.of(2020,1,31);
System.out.println(date.plusMonths(1).minusMonths(1));
// 2020-01-29

plusMonthsで2020-02-29になり、2020-02-29にminusMonthsをしているので結果は2020-01-29になりました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1