DateTimeFormatterBuilder mit angegebenen parseDefaulting-Konflikten für das Feld YEAR

Ich habe den folgenden Formatierer:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern("yyyyMM")
        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
        .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
        .parseDefaulting(ChronoField.YEAR, ZonedDateTime.now().getYear())
        .toFormatter()
        .withZone(ZoneId.systemDefault());

Ich versuche den String "201505" zu parsen

System.out.println(ZonedDateTime.parse("201505", formatter));

und es löst eine Ausnahme aus:

Ursache: java.time.DateTimeException: Konflikt gefunden: Jahr 2016 unterscheidet sich von Jahr 2015

Es funktioniert, wenn ich die Einstellung des Standardwerts für YEAR auskommentiere.

Soweit ich die Dokumentation verstanden habe, sollte nur versucht werden, den Standardwert zu ersetzen, wenn kein Wert analysiert wurde. Scheint so, als würde das für einen Monat funktionieren, da ich einen anderen Monat als den analysierten Standardmonat habe. Es funktioniert jedoch nicht für das Jahr.

Wenn ich es falsch verwende, kann mir jemand sagen, ob es eine andere Möglichkeit gibt, Standardwerte für Felder zu definieren, die in einem Muster möglicherweise nicht vorhanden sind?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage