DateTimeFormmater
は月の1桁の日を処理しないようです:
String format = "MM/dd/yyyy";
String date = "5/3/1969";
System.out.println(new SimpleDateFormat(format).parse(date));
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));
この例では、SimpleDateFormat
は日付を正しく解析しますが、DateTimeFormatter
は例外をスローします。 「0969/1969」のようにゼロ詰めの日付を使用する場合、両方とも機能します。ただし、月の日または年の月が1桁の場合、DateTimeFormatter
は例外をスローします。
1桁と2桁の日と年の月の両方を解析するための正しいDateTimeFormatter
形式は何ですか?
ドキュメント から:
Number:文字数が1の場合、値は最小桁数を使用してパディングなしで出力されます。
したがって、必要な書式指定子はM/d/yyyy
で、単一文字形式を使用します。もちろん、これらの日/月の値については、日付String
sを"12/30/1969"
のように正しく解析します。2桁は「最小桁数」です。
重要な違いは、MM
とdd
がゼロパディングを必要とすることであり、M
とd
が9を超える値を処理できないことです(少し…異常です) 。