【Java初心者向け】CalendarクラスのsetLenientメソッドで厳密チェック!

こんにちは。関口です。
 
Javaで日付の処理を行う際に使用する、Calendarクラス。結構頻繁に使用しますよね。今回はそんなCalendarクラスの基本をおさらいしつつ、setLenientメソッドの紹介をしていきます。

目次

  1. Calendarクラスとは
  2. 日付の取得! Getメソッド
  3. 日付の設定! Setメソッド
  4. 日付の厳密チェック! setLenientメソッド
  5. まとめ

現在日時の取得・設定、日付の加算・減算など、日付の処理を行うさまざまな場面で使用できます。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

使用する際は「java.util.Calendar」をインポートします。Calendarクラスのオブジェクト生成は、現在日時を元に生成されます。実際の日付は「2021年6月1日」ですが、月の取得で「5」となっていますね。
 
Calendarクラスで月は0から始めるため、「0 = 1月」、「5 = 6月」となります。実際の月とは異なることを覚えておきましょう。

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

setLenientメソッド設定しない場合は「true」が初期値として設定されています。厳密化設定を行うことで、設定値の不正をキャッチすることができます!
 
また、設定値エラーが発生している場所はSet時ではなく、Get時になります。覚えておきましょう。

いかがでしたでしょうか。
 
今回紹介したGetメソッド、Setメソッド、setLenientメソッドの他にも、さまざまなメソッドがあります。Calendarクラスをマスターする道のりは長い!
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES