Unerwartetes Ergebnis der Datumsberechnung

8

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?

    
JimmyD 13.11.2017, 07:38
quelle

1 Antwort

12

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:

%Vor%
  

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 .

%Vor%

Um genau zu sein, ist das Wichtigste:

.withYear(year) wird vor

aufgerufen %Vor%     
davidxxx 13.11.2017, 07:50
quelle

Tags und Links