TL; DR: LocalDate
tut, was dokumentiert ist, gemäß einer internationalen Norm (ISO 8601). Ob dies "richtig" ist oder nicht, ist eine ganz andere Frage.
Der LocalDate
Javadoc selbst enthält diese Einschränkung:
Es entspricht dem proleptischen gregorianischen Kalendersystem, in dem die heutigen Regeln für Schaltjahre für alle Zeiten angewendet werden. Für die meisten heute geschriebenen Anwendungen sind die ISO-8601-Regeln völlig geeignet. Für jede Anwendung, die historische Daten verwendet und deren Genauigkeit erfordert, ist der ISO-8601-Ansatz jedoch ungeeignet.
Wikipedia hat weitere Informationen zum proleptischen Gregorianischen Kalender . Unter anderem heißt es:
Mathematisch ist es bequemer, ein Jahr 0 einzuschließen und frühere Jahre als negativ darzustellen, um die Berechnung der Anzahl der Jahre zwischen einem negativen (BC) Jahr und einem positiven (AD) Jahr zu erleichtern. Dies ist die Konvention, die bei der astronomischen Jahresnummerierung und im internationalen Standarddatumsystem ISO 8601 verwendet wird. In diesen Systemen ist das Jahr 0 ein Schaltjahr.
Verzeihen Sie mir einen Moment, während ich in einen historischen Kontext für all dies eintauche.
Die Jahre im westlichen Kalender werden angeblich ab der Geburt Jesu Christi gezählt, aber die Idee dazu begann im sechsten Jahrhundert, und unser aktueller Kalender basiert auf Berechnungen aus dem sechzehnten Jahrhundert. Da römische Ziffern weder Null noch negative Zahlen darstellten, wurden die Jahre entweder "nach Jesus" (n. Chr. Für anno domini ) oder "vor Jesus" (v. Chr. Für "vor Christus") gezählt. So folgte traditionell 1 v. Chr. 1 n. Chr. Ohne Jahr Null dazwischen.
Im ersten Jahrhundert zählte jedoch niemand Jahre so; Zum Vergleich beschreibt das Lukasevangelium das Jahr, in dem Jesus seinen Dienst begann, als
im fünfzehnten Regierungsjahr von Tiberius Cäsar war Pontius Pilatus Gouverneur von Judäa, Herodes Tetrarch von Galiläa und sein Bruder Philip Tetrarch von Ituraea und der Region Trachonitis sowie Lysanias der Tetrarch von Abilene.
Angeblich wäre dies 30 n. Chr. Gewesen, da Lukas Jesus damals als "ungefähr dreißig Jahre alt" beschreibt. Moderne Historiker sind sich jedoch im Allgemeinen einig, dass Dionysius Exiguus, der 525 n. Chr. Das Anno-Domini- System vorschlug , es falsch verstanden hat und daher die Anzahl der Jahre um mindestens ein oder zwei Jahre abweicht. (Das genaue Datum ist immer noch etwas umstritten. Weitere Informationen finden Sie in Wikipedia .)
Aber es ist zu spät, um es jetzt zu reparieren. Selbst der Übergang vom julianischen zum gregorianischen Kalender, der eine Diskrepanz von weniger als zwei Wochen darstellte, stieß auf großen politischen Widerstand, als die Umstellung in ganz Europa über einen Zeitraum von mehreren Jahrhunderten erfolgte - Sie können sich vorstellen, wie störend eine Änderung der Jahresnummerierung war wäre jetzt!
Was hat diese Geschichte heute mit Software zu tun? Leider müssen Sie aufgrund der unzähligen Methoden, mit denen Daten im Laufe der Geschichte berechnet und niedergeschrieben wurden, entweder auf den Kalender verzichten, der sich konsistent verhält, wenn Sie sich in der Zeit vorwärts und rückwärts bewegen, oder Sie müssen auf berechnete Daten verzichten Korrespondenz mit den Daten, die echte Menschen zu diesem Zeitpunkt verwendet hätten. Die Abweichung geschieht schneller als Sie vielleicht denken: Viele europäische Länder haben den julianischen Kalender noch vor weniger als 100 Jahren verwendet, mit einer Abweichung von fast zwei Wochen von allen anderen in Europa!
Verständlicherweise LocalDate
wäscht er seine Hände von diesem Durcheinander und implementiert den Kalender nur so, wie wir ihn heute verwenden. Wiederholen, was der Javadoc sagt: "Für die meisten heute geschriebenen Anwendungen sind die ISO-8601-Regeln völlig geeignet. Für jede Anwendung, die historische Daten verwendet und deren Genauigkeit erfordert, ist der ISO-8601-Ansatz jedoch ungeeignet."