web-dev-qa-db-ja.com

DateTimeFormatterによる1桁の月の日と年の月のサポート

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形式は何ですか?

41
Mark Maxey

ドキュメント から:

Number:文字数が1の場合、値は最小桁数を使用してパディングなしで出力されます。

したがって、必要な書式指定子はM/d/yyyyで、単一文字形式を使用します。もちろん、これらの日/月の値については、日付Stringsを"12/30/1969"のように正しく解析します。2桁は「最小桁数」です。

重要な違いは、MMddがゼロパディングを必要とすることであり、Mdが9を超える値を処理できないことです(少し…異常です) 。

65
Holger