Javaにて年と月から、その年の月末日を求める方法をメモとして残します。
環境
- Java
- 15
前提条件
- パラメータは年と月のみ
- 「2021-05」等の1つにまとまったパラメータも含む
ゴール
- 閏年も含めて、月末日を求めることができる
YearMonth型
Java8からjava.time.YearMonth
クラスが提供されております。クラス名の通り、YearとMonthを扱います。
インスタンスの生成
複数ありますが、使い勝手のいい2つのメソッドを紹介します。
ofメソッド
// intの年とintのmonthから生成する方法 YearMonth.of(int year, int month); YearMonth.of(2020, 2);
parseメソッド
デフォルトのDateTimeFormatter
はyyyy-MM
となっています。(※正確には、年は4桁から10桁まで許容しています)
// Stringの年月から生成する方法 YearMonth.parse(CharSequence text); YearMonth.parse(CharSequence text, DateTimeFormatter dateTimeFormatter); YearMonth.parse("2020-02"); YearMonth.parse("202_0-02"); // Java7からの数値表現 YearMonth.parse("2020/02", DateTimeFormatter.of("yyyy/MM"));
月末日を求める方法
atEndOfMonth
メソッドを使用します。このメソッドの戻り値が指定した年の月末日のLocalDate
クラスとなります。
@Test void test_01() { assertThat( YearMonth.of(2020, 1).atEndOfMonth() ).isEqualTo(LocalDate.of(2020, 1, 31)); }
もし、日付だけ取得したい場合は、LocalDate
クラスのgetDayOfMonth
メソッドを呼ぶことで取得することができます。
@Test void test_01_02() { assertThat( YearMonth.of(2020, 1).atEndOfMonth().getDayOfMonth() ).isEqualTo(31); }
ソースコード
テストコード: github.com
終わりに
YearMonth
クラスは特化しているだけあって意図が分かりやすいですね。
月末日を求める方法は複数あるので、YearMonth
クラスを意図的に使うことは少ないかもしれませんが、メソッド名等を直感的に使えます。ぜひこの記事を元に使ってみてください。
この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。