ローカル日付の解析は、セパレータなしで動作していません

トーマス・フェロ:

私は、次のようにフォーマットされた日付を持っています:

2桁の数字で、その後の週番号4桁で年。

例えば、2018年の第四週目になります201804

私はトラブルのJava 8の使用してこれらの日付を解析抱えLOCALDATEDateTimeFormatterBuilderを

ここで私は日付を解析しようとする方法です。

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()
        );

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=185880&siteId=1