「Java」setLenientで日付の存在チェックを行うサンプル

2022年2月4日

環境
JavaSe-17
Eclipse2021

書式
DateFormatは、言語に依存しない方法で日付または時間をフォーマットおよび解析する、日時フォーマット・サブクラスの抽象クラスです。
1.getDateInstance()
デフォルトのFORMATロケールに対し、デフォルトのフォーマット・スタイルを持つ日付フォーマッタを取得します。
2.setLenient(boolean lenient)
日時解析を厳密に行うかどうかを設定します。
3.parse(String source)
指定された文字列の先頭からテキストを解析して日付を生成します。
指定した日付文字列(yyyy/MM/dd or yyyy-MM-dd)がカレンダー上に存在するかどうかをチェックします。

使用例

package com.arkgame.study;

import java.text.DateFormat;

public class DateComDemo {

      private static final String cftA = "2022-02-02";
      private static final String cftB = "2022/03/02";
      private static final String cftC = "2022/a/02";
      private static final char MARK = '/';

      public static void main(String[] args) {
            //chkDateFunc関数を呼び出す
            System.out.println("日付存在チェック: " + chkDateFunc(cftA));
            System.out.println("日付存在チェック: " + chkDateFunc(cftB));
            System.out.println("日付存在チェック: " + chkDateFunc(cftC));
      }

      /**
       * 日付の妥当性チェックを行います。
       *  指定した日付文字列(yyyy/MM/dd またはyyyy-MM-dd)が カレンダーに存在するかどうかを返します。
       * @param strDte チェック対象の文字列
       * @return 存在する日付の場合true
       */
      public static boolean chkDateFunc(String strDte) {
            
            //引数の文字列はnullまたは長さは10以外
            if (strDte == null || strDte.length() != 10) {
                  throw new IllegalArgumentException("日付引数の文字列[" + strDte + "]" + "は不正です。");
            }
            strDte = strDte.replace('-', MARK);
            DateFormat format = DateFormat.getDateInstance();
            // 日付/時刻解析を厳密に行うかどうかを設定
            format.setLenient(false);
            try {
                  format.parse(strDte);
                  return true;
            } catch (Exception e) {
                  return false;
            }
      }

}

実行結果

日付存在チェック: true
日付存在チェック: true
Exception in thread "main" java.lang.IllegalArgumentException: 引数の文字列[2022/a/02]は不正です。
at com.arkgame.study.DateComDemo.chkDateFunc(DateComDemo.java:26)
at com.arkgame.study.DateComDemo.main(DateComDemo.java:15)

 

Java

Posted by arkgame