Ich habe eine Methode, um einen Kalender in Java anzuzeigen, der das Datum nach Jahr, Wochentag und Wochennummer berechnet.
Jetzt, wenn ich die Daten von 2017 kalkuliere, funktioniert alles. Aber wenn ich die Daten von Januar 2018 kalkuliere, werden die Daten des Jahres 2017 genommen.
Mein Code sieht wie
aus %Vor%Ergebnis 2018-01-02 und 2018-01-01. Wie ist das möglich?
Die Reihenfolge der aufgerufenen Methoden scheint wichtig zu sein.
Wenn Sie sie durch absteigende Zeitgranularität (Jahr, Woche der Woche und Wochentag) aufrufen, erhalten Sie das richtige Ergebnis:
2018-01-01
Beachten Sie, dass der Ursprung des Problems von:
stammt %Vor%, die die Wochennummer ( 1 to 53
) dem aktuellen Jahr anpasst.
Die Java LocalDate
API kann diesen Wert nicht anpassen, wenn Sie dann das Jahr mit .withYear(year)
als Wochennummer ändern wird nicht in der LocalDate
-Instanz gespeichert.
Sie können tatsächlich in LocalDate
implementation sehen, dass LocalDate
Instanzen nur durch 3 Felder definiert sind: year
, month
und day
.
Um genau zu sein, ist das Wichtigste:
.withYear(year)
wird vor