Java11 DateTimeFormatterを利用して有効な日付をチェックするサンプル
環境
Java SE 11
Eclipse 4.26.0
構文
String 日付の変数名 =値;
DateTimeFormatter.ofPattern(“uuuuMMdd").withResolverStyle(ResolverStyle.STRICT).parse(日付の変数名,LocalDate::from);
DateTimeFormatterでは「yyyy」ではなく「uuuu」で指定します。
withResolverStyle(ResolverStyle.STRICT)を指定することで、有効な日付をチェックします。
パターンは、ofPattern(String)メソッドおよびofPattern(String, Locale)メソッドを使用してFormatterを作成する場合に使用されます。 たとえば、"d MMM uuuu"を使用すると、2011-12-03は「3 Dec 2011」と書式設定されます。
使用例
package com.arkgame.study; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.ResolverStyle; public class ArktestDemo { public static void main(String[] args) { System.out.println("yyyy-MM-dd形式:" + isFunDate("2023-02-29")); System.out.println("yyyyMMdd形式:" + isFunDate("20230126")); System.out.println("yyyy-M-d形式:" + isFunDate("2023-2-1")); } /** * 日付チェック * @param str * @return true 存在する日付 false日付ではない */ public static boolean isFunDate(String str) { boolean result = false; if (str != null) { try { String checkDate = str.replace("-", "").replace("/", ""); DateTimeFormatter.ofPattern("uuuuMMdd").withResolverStyle(ResolverStyle.STRICT).parse(checkDate, LocalDate::from); result = true; } catch (Exception e) { result = false; } } return result; } }
実行結果
yyyy-MM-dd形式:false
yyyyMMdd形式:true
yyyy-M-d形式:false