
こんにちは。関口です。
Javaで日付の処理を行う際に使用する、Calendarクラス。結構頻繁に使用しますよね。今回はそんなCalendarクラスの基本をおさらいしつつ、setLenientメソッドの紹介をしていきます。
目次
Calendarクラスとは
現在日時の取得・設定、日付の加算・減算など、日付の処理を行うさまざまな場面で使用できます。JavaではCalendarクラスの他に、DateクラスやLocalDateTimeクラスなどでも日付の処理を行うことができます。今回は触れませんが、ぜひ調べてみてください。
日付の取得! Getメソッド
Getメソッドは日時を取得する際に使用します。基本となるオブジェクトの生成と、年・月・日の取得を試してみましょう!
1 2 3 4 5 6 7 8 9 10 |
// オブジェクト生成 Calendar cl = Calendar.getInstance(); // 現在日時 System.out.println("現在日時:" + cl.getTime().toString()); // 年の取得 System.out.println("年:" + cl.get(Calendar.YEAR)); // 月の取得 System.out.println("月:" + cl.get(Calendar.MONTH)); // 日の取得 System.out.println("日:" + cl.get(Calendar.DATE)); |
実行結果
1 2 3 4 |
現在日時:Tue Jun 01 22:14:25 JST 2021 年:2021 月:5 日:1 |
使用する際は「java.util.Calendar」をインポートします。Calendarクラスのオブジェクト生成は、現在日時を元に生成されます。実際の日付は「2021年6月1日」ですが、月の取得で「5」となっていますね。
Calendarクラスで月は0から始めるため、「0 = 1月」、「5 = 6月」となります。実際の月とは異なることを覚えておきましょう。
日付の設定! Setメソッド
setメソッドは日時を設定する際に使用します。年・月・日ごとの設定から、年・月・日の一括設定を試してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// オブジェクト生成 Calendar cl = Calendar.getInstance(); // 現在日時 System.out.println("現在日時:" + cl.getTime().toString()); // 年に「2020年」を設定 cl.set(Calendar.YEAR, 2020); System.out.println("年:" + cl.getTime().toString()); // 月に「7月」を設定 cl.set(Calendar.MONTH, 6); System.out.println("月:" + cl.getTime().toString()); // 日に「5日」を設定 cl.set(Calendar.DATE, 5); System.out.println("日:" + cl.getTime().toString()); // 年月日に「2021年9月11日」を設定 cl.set(2021, 8, 11); System.out.println("年月日:" + cl.getTime().toString()); // 年月日時分秒に「2020年6月20日11時55分12秒」を設定 cl.set(2020, 5, 20, 11, 55 , 12); System.out.println("年月日時分秒:" + cl.getTime().toString()); |
実行結果
1 2 3 4 5 6 |
現在日時:Tue Jun 01 22:19:43 JST 2021 年:Mon Jun 01 22:19:43 JST 2020 月:Wed Jul 01 22:19:43 JST 2020 日:Wed Jul 05 22:19:43 JST 2020 年月日:Sat Sep 11 22:19:43 JST 2021 年月日時分秒:Sat Jun 20 11:55:12 JST 2020 |
設定した要素以外は、前の値が引き継がれるという事を覚えておきましょう。
日付の厳密チェック! setLenientメソッド
基本をおさらいしたところで、いよいよsetLenientメソッドをご紹介します。setLenientメソッドは、設定することで日付の厳密化を行うことが出来ます。まず厳密化設定をした場合と、していない場合の違いを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// オブジェクト生成 Calendar cl = Calendar.getInstance(); // 現在日時 System.out.println("現在日時:" + cl.getTime().toString()); // 厳密化設定ON cl.setLenient(false); System.out.println("-- 厳密化設定ONの場合 --"); try { // 年月日に「2021年6月31日」を設定 cl.set(2021, 5, 31); System.out.println("-- set時にはエラー発生していない --"); System.out.println("月:" + cl.getTime().toString()); } catch (IllegalArgumentException e) { // 設定値不正の場合 System.out.println("不正な値です!" + e); } // 厳密化設定OFF cl.setLenient(true); System.out.println("-- 厳密化設定OFFの場合 --"); try { // 年月日に「2021年6月31日」を設定 cl.set(2021, 5, 31); System.out.println("月:" + cl.getTime().toString()); } catch (IllegalArgumentException e) { // 設定値不正の場合 System.out.println("不正な値です!" + e); } |
実行結果
1 2 3 4 5 6 7 8 |
現在日時:Wed Jun 02 00:02:22 JST 2021 -- 厳密化設定ONの場合 -- -- set時にはエラー発生していない -- 不正な値です!java.lang.IllegalArgumentException: MONTH: 5 -> 6 -- 厳密化設定OFFの場合 -- 月:Thu Jul 01 00:02:22 JST 2021 |
setLenientメソッド設定しない場合は「true」が初期値として設定されています。厳密化設定を行うことで、設定値の不正をキャッチすることができます!
また、設定値エラーが発生している場所はSet時ではなく、Get時になります。覚えておきましょう。
まとめ
いかがでしたでしょうか。
今回紹介したGetメソッド、Setメソッド、setLenientメソッドの他にも、さまざまなメソッドがあります。Calendarクラスをマスターする道のりは長い!
《関連記事》

