お知らせ
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クラスをマスターする道のりは長い!
《関連記事》