私の入力は、2015年7月1日の "01-07-2015"形式の日付の文字列表現です。これをJava.time.LocalDate
変数に解析しようとしています。
final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-YYYY");
final String input = "01-07-2015";
final LocalDate localDate = LocalDate.parse(input, DATE_FORMAT);
DateTimeFormatter
JavaDoc に基づいて、これが機能すると期待しています。しかし、私は非常にフレンドリーで役立つメッセージで迎えられます:
原因:Java.time.DateTimeException:TemporalAccessorからLocalDateを取得できません:{DayOfMonth = 1、MonthOfYear = 7、WeekBasedYear [WeekFields [MONDAY、4]] = 2015}、タイプJava.time.format.ParsedのISO
私はこの例外が私に何を伝えているのか本当に理解していません。誰が間違っているのか説明してもらえますか?
年間では、小文字のyを使用する必要があります。
final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy");
大文字のYは平年に使用されます。詳細については、 DateTimeFormatterのjavadoc を参照してください。
質問に対する答えは、「Y」ではなく「y」を使用することです。
エラーメッセージを説明するには、分解してみましょう。
_Unable to obtain LocalDate from TemporalAccessor
_
これは、LocalDate
(日付/時刻のフィールドへのハッシュマップのようなアクセスを提供する低レベルのインターフェース)からTemporalAccessor
(要求されたもの)を作成できないと言っています。
_of type Java.time.format.Parsed
_
これは、メソッドに渡されるオブジェクトが_Java.time.format.Parsed
_型であったことを意味しています。これは解析の標準出力タイプであり、解析されたすべての情報が含まれています。
_{DayOfMonth=1, MonthOfYear=7, WeekBasedYear[WeekFields[MONDAY,4]]=2015},ISO
_
これは、構文解析の結果である_Java.time.format.Parsed
_オブジェクトのtoString()
形式です。 4つのことが解析されたと言っています。
DayOfMonth=1
_、_1
_の値で解析された月の日MonthOfYear=7
_、_7
_の値で解析された月WeekBasedYear[WeekFields[MONDAY,4]]=2015
_、値_2015
_で解析された週ベースの年ISO
、ISOカレンダーシステム(デフォルト値)DayOfMonth + MonthOfYear + WeekBasedYearの組み合わせからLocalDate
を生成することはできないため、例外がスローされます。
_[WeekFields[MONDAY,4]]
_の部分は、週を定義するさまざまな方法があり、米国の週は日曜日に始まりますが、ISO規格およびEUでは月曜日に始まるという事実に言及していることに注意してください。