2.5 Welchen Bedarf der Java-Community wird in der vorgeschlagenen Spezifikation berücksichtigt?
Derzeit verfügt Java SE über zwei separate Datums- und Uhrzeit-APIs - java.util.Date und java.util.Calendar. Beide APIs werden von Java-Entwicklern in Weblogs und Foren durchweg als schwierig zu verwenden beschrieben. Insbesondere verwenden beide monatelang einen Nullindex, was eine Ursache für viele Fehler ist. Der Kalender hat im Laufe der Jahre auch unter vielen Fehlern und Leistungsproblemen gelitten, hauptsächlich aufgrund der internen Speicherung seines Status auf zwei verschiedene Arten.
Ein klassischer Fehler (4639407) verhinderte, dass bestimmte Daten in einem Kalenderobjekt erstellt wurden. Es könnte eine Codesequenz geschrieben werden, die in einigen Jahren ein Datum erstellen könnte, in anderen jedoch nicht, wodurch verhindert wird, dass einige Benutzer ihre korrekten Geburtsdaten eingeben. Dies wurde durch die Kalenderklasse verursacht, die im Sommer nur einen Sommerzeitgewinn von einer Stunde zuließ, während es in der Vergangenheit um die Zeit des Zweiten Weltkriegs plus 2 Stunden waren. Während dieser Fehler jetzt behoben ist, würde die Kalenderklasse erneut unterbrochen, wenn ein Land irgendwann in der Zukunft einen Sommerzeitgewinn von plus drei Stunden einführen würde.
Die aktuelle Java SE-API leidet auch in Multithread-Umgebungen. Unveränderliche Klassen sind bekanntermaßen von Natur aus threadsicher, da sich ihr Status nicht ändern kann. Sowohl Datum als auch Kalender sind jedoch veränderbar, sodass Programmierer das Klonen und Threading explizit berücksichtigen müssen. Darüber hinaus ist der Mangel an Thread-Sicherheit in DateTimeFormat nicht allgemein bekannt und hat viele schwer zu ermittelnde Threading-Probleme verursacht.
Neben den Problemen mit den Klassen, die Java SE für datetime hat, gibt es keine Klassen zum Modellieren anderer Konzepte. Nicht-Zeitzonendaten oder -zeiten, -dauern, -perioden und -intervalle haben in Java SE keine Klassendarstellung. Infolgedessen verwenden Entwickler häufig ein int, um eine Zeitdauer darzustellen, wobei javadoc die Einheit angibt.
Das Fehlen eines umfassenden Datums- und Zeitmodells führt auch dazu, dass viele gängige Operationen schwieriger sind, als sie sein sollten. Beispielsweise ist die Berechnung der Anzahl der Tage zwischen zwei Daten derzeit ein besonders schwieriges Problem.
Dieses JSR wird das Problem eines vollständigen Datums- und Zeitmodells angehen, einschließlich Datum und Uhrzeit (mit und ohne Zeitzonen), Dauer und Zeiträumen, Intervallen, Formatierung und Analyse.