Java 月末のplusMonths
月末に対して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
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
該当しない日付に対しては、有効な日付が戻ってきてますね
余談
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になりました。
Author And Source
この問題について(Java 月末のplusMonths), 我々は、より多くの情報をここで見つけました https://qiita.com/nanaco/items/542fdd46e2d60180c7ec著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .