SimpleDateFormatは、エラーをスローする代わりに、結果の日付をローリングする非常に親切なパーサーです。正規表現などを使わずに日付を厳密に解析するにはどうすればよいですか?
fmt = new SimpleDateFormat("dd.MM.yyyy")
fmt.parse("10.11.2012") // it works
fmt.parse("10.1150.2012") // it works but it's unwanted
SimpleDateFormatは、エラーをスローする代わりに、結果の日付をローリングする非常に親切なパーサーです。正規表現などを使わずに日付を厳密に解析するにはどうすればよいですか?
fmt = new SimpleDateFormat("dd.MM.yyyy")
fmt.parse("10.11.2012") // it works
fmt.parse("10.1150.2012") // it works but it's unwanted
fmt.setLenient(false);
あなたが探しているものです。
Java 8 以降ではjava.time パッケージを使用することもできます(チュートリアル)。その解析では、日付の値が厳密にチェックされます。
例えば:
String strDate = "20091504";
TemporalAccessor ta = DateTimeFormatter.ofPattern("yyyyMMdd").parse(strDate);
直接与える:
Exception in thread "main" java.time.format.DateTimeParseException:
Text '20091504' could not be parsed:
Invalid value for MonthOfYear (valid values 1 - 12): 15