Java

Javaで日付チェックを実装する方法

はじめに

JavaのDateTimeFormatterで日付チェックを実装する方法を紹介します。

今回のチェックでは「yyyyMMdd」「yyyy/MM/dd」「yyyy-MM-dd」形式を許容し、更に有効な日付(2021/02/29(うるう年ではない)のような存在しない日付はチェックNG)のみチェックOKとしています。

スポンサーリンク

DateTimeFormatterによる日付チェック

DateTimeFormatterを使用した日付チェックは以下の通り。

/**
 * 日付チェック
 * @param value 検証対象の値
 * @return 結果(true:日付、false:日付ではない)
 */
public static boolean isDate(String value) {
    boolean result = false;

    if (value != null) {
        try {
            String checkDate = value.replace("-", "").replace("/", "");
            DateTimeFormatter.ofPattern("uuuuMMdd").withResolverStyle(ResolverStyle.STRICT).parse(checkDate, LocalDate::from);
            result = true;

        } catch (Exception e) {
            result = false;
        }
    }

    return result;
}

withResolverStyle(ResolverStyle.STRICT)を指定することで、有効な日付(存在する日付)のみチェックOKとしています。

※withResolverStyle(ResolverStyle.STRICT)を指定しないと、「2021-02-29」のような存在しない日付は「2021-02-28」に勝手にパースされてしまうので要注意です。

また、DateTimeFormatterでは「yyyy」ではなく「uuuu」で指定します。

動作確認

動作確認結果は以下の通り。

System.out.println("NULL:" + isDate(null));
System.out.println("空文字:" + isDate(""));
System.out.println("yyyy/MM/dd形式:" + isDate("2020/08/26"));
System.out.println("yyyy-MM-dd形式:" + isDate("2020-08-26"));
System.out.println("yyyyMMdd形式:" + isDate("20200826"));
System.out.println("時刻あり:" + isDate("2020-08-26 22:00:00"));
System.out.println("yyyy-M-d形式:" + isDate("2020-2-1"));
System.out.println("うるう年:" + isDate("2020-02-29"));
System.out.println("うるう年ではない:" + isDate("2021/02/29"));
System.out.println("無効な日付:"+ isDate("2020/13/01"));
System.out.println("文字列:" + isDate("あいうえお"));
System.out.println("数値:" + isDate("12345"));

【実行結果】

  • NULL:false
  • 空文字:false
  • yyyy/MM/dd形式:true
  • yyyy-MM-dd形式:true
  • yyyyMMdd形式:true
  • 時刻あり:false
  • yyyy-M-d形式:false
  • うるう年:true
  • うるう年ではない:false
  • 無効な日付:false
  • 文字列:false
  • 数値:false

「yyyyMMdd」「yyyy/MM/dd」「yyyy-MM-dd」形式の有効な日付(存在する日付)のみチェックOKとしています。

最後に

本記事では、Javaで日付チェックを実装する方法を紹介しました。

【関連記事】

よろしければ記事の評価をお願いします

© 2020 ITを分かりやすく解説