
お知らせ
2023.12.5(Tue)
目次
こんにちは。関口です。
Javaで日付の処理を行う際に使用する、Calendarクラス。結構頻繁に使用しますよね。今回はそんなCalendarクラスの基本をおさらいしつつ、setLenientメソッドの紹介をしていきます。
現在日時の取得・設定、日付の加算・減算など、日付の処理を行うさまざまな場面で使用できます。JavaではCalendarクラスの他に、DateクラスやLocalDateTimeクラスなどでも日付の処理を行うことができます。今回は触れませんが、ぜひ調べてみてください。
Getメソッドは日時を取得する際に使用します。基本となるオブジェクトの生成と、年・月・日の取得を試してみましょう!
// オブジェクト生成 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));
現在日時:Tue Jun 01 22:14:25 JST 2021 年:2021 月:5 日:1
setメソッドは日時を設定する際に使用します。年・月・日ごとの設定から、年・月・日の一括設定を試してみましょう。
// オブジェクト生成 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());
現在日時: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メソッドは、設定することで日付の厳密化を行うことが出来ます。まず厳密化設定をした場合と、していない場合の違いを見てみましょう。
// オブジェクト生成 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); }
現在日時: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
いかがでしたでしょうか。
今回紹介したGetメソッド、Setメソッド、setLenientメソッドの他にも、さまざまなメソッドがあります。Calendarクラスをマスターする道のりは長い!
《関連記事》