はじめに
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
この記事は役に立ちましたか?