トーマス・フェロ:
私は、次のようにフォーマットされた日付を持っています:
2桁の数字で、その後の週番号4桁で年。
例えば、2018年の第四週目になります201804。
私はトラブルのJava 8の使用してこれらの日付を解析抱えLOCALDATEとDateTimeFormatterBuilderを。
ここで私は日付を解析しようとする方法です。
LocalDate.parse(
"201804",
new DateTimeFormatterBuilder().appendPattern("YYYYww").parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()
);
実行は、次の例外がスローされます。
java.time.format.DateTimeParseException:テキスト「201804」は、インデックス0で解析できませんでした
奇妙な行動は、私は日付の部分との間に区切りを追加する場合、例外はもうスローされない、ということです。
LocalDate.parse(
"2018 04",
new DateTimeFormatterBuilder().appendPattern("YYYY ww").parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()
);
での結果:
2018年1月22日
私はフォーマッタで行方不明です事はありますか?
彼らは次のとおりでした:
あなたは使用することができます appendValue
このメソッドは、「隣接する値の解析」として知られているパースの特別な技術をサポートしています。この技術は値、可変または固定幅の問題を解決し、一つ以上の固定長値が続きます。標準的な構文は貪欲であり、したがってそれは、通常、可変幅の1に続く固定幅の値パーサによって必要とされている数字を盗むでしょう。
何のアクションは、「隣接する値の解析」を開始するのに必要とされません。appendValueへの呼び出しが行われると、ビルダーは、隣接する値の解析セットアップモードに入ります。
この作品そう。
LocalDate.parse(
"201804",
new DateTimeFormatterBuilder()
.appendValue(YEAR, 4)
.appendValue(ALIGNED_WEEK_OF_YEAR, 2)
.parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()
);