はじめに
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で日付チェックを実装する方法を紹介しました。
【関連記事】
- Javaで数値チェックを実装する方法
- Javaで日付チェックを実装する方法
- Javaで時刻チェックを実装する方法
- Javaでメールアドレスのチェックを実装する方法
- Javaで郵便番号のチェックを実装する方法
- Javaで全角カナのチェックを実行する方法
- Javaで半角カナのチェックを実装する方法
- Javaでひらがなのチェックを実装する方法
- Javaで英字のチェックを実装する方法
helpful
この記事は役に立ちましたか?