Obwohl Joda reich an Funktionen und ausgefeilter als die Standard-Java-Zeit ist, ist es möglicherweise nicht immer die beste Wahl. Wie entscheide ich, ob ich Joda Time oder Java Time in einem Java-Code verwenden soll?
Gibt es eine Richtlinie, die uns sagt, wie wir die richtige für unsere Anforderungen auswählen können?
Antworten:
Joda Time ist eine solche Verbesserung gegenüber der Java-Zeitbibliothek, dass es mit Ausnahme der folgenden Ausnahmen fast immer die richtige Wahl ist:
Wenn es schwierig oder unerwünscht ist, Abhängigkeiten von Drittanbietern zu Ihrem Projekt hinzuzufügen
Wenn die Verwendung in einer öffentlichen Schnittstelle zu Problemen führen würde, z. B. wenn ein ORM sowohl Java- als auch Joda-Zeitfelder verarbeiten soll
Bei 2) ist es jedoch besser, wenn möglich, Joda intern zu verwenden.
Die oben genannten Dinge sind zu beachten, sollten aber selten sein. Wenn Sie Zweifel haben, gehen Sie mit Joda.
quelle
Beachten Sie, dass auf der Joda-Time- Website Folgendes angegeben ist:
Der Hauptverantwortliche für Joda-Time , jodastephen , ist auch der Hauptverantwortliche für JSR-310, wie im GitHub-Repository zu sehen ist, das mit http://www.threeten.org/ verknüpft ist . By the way, jodastephen hat auch einen SO Griff ...
Ich denke, wir können mit der neuen Datums- und Uhrzeit-API, die ab Java 8 verfügbar ist, beruhigt und sicher sein .
Einige zusätzliche Referenzen:
java.time.*
JavadocDate
Javadocquelle
Die Java-Standard-Datums-API ist so grundlegend fehlerhaft, dass ich oft überlegt habe, einfach Joda Time zu den Bibliothekserweiterungen der JVM hinzuzufügen, damit sie standardmäßig mit dem Rest der Java-API in den Klassenpfad geladen wird.
Wenn Sie jemals mit der Nachrüstung von Internationalisierung und Zeitzonen in einer älteren Java-Anwendung beauftragt wurden und versucht haben, nur die Standard-Java-API zu verwenden, werden Sie verstehen, was ich meine. Ich konnte Tausende von Codezeilen in weniger als hundert umwandeln. Der Produktivitätsschub ist unvorstellbar.
Darüber hinaus ist die Standard-Datums-API nicht intuitiv, da die flüssige Joda-API in Stunden und nicht in Wochen abgerufen werden kann. Ihre Analogie, wie Sie versuchen, auf die drei Kilometer entfernte Insel zu gelangen, ähnelt der folgenden.
Oder...
Wie in anderen Antworten bereits festgestellt wurde, treten die wenigen Nachteile wie der ORM nicht mehr auf, da Hibernate jetzt Plugins enthält, mit denen Joda-Typ-Bean-Eigenschaften Datenbank-Datums- / Zeitfeldern zugeordnet werden können. JPA könnte auch eine Antwort darauf haben.
Wenn Sie möchten, dass Ihre Anwendung als Desktop-Anwendung einen minimalistischen Platzbedarf aufweist, da sie sich auf den Festplattenspeicher bezieht, ist Java möglicherweise nicht einmal die richtige Sprache.
quelle
Ein weiterer Punkt: Java-Time (dh
Date
) ist nicht ThreadSafe, sondern JodaTime. So wird JodaTime bevorzugt, wenn Anforderungen wieOder für einfache Anwendungen ist Java-Time in Ordnung.
quelle
java.time
wird durch Unveränderlichkeit implementiert. Siehe stackoverflow.com/questions/9303532/… . Dies funktioniert sowohl für einfache als auch für komplexe Anwendungen. Sogar das API-Dokument gibt an, dass "alle Klassen unveränderlich und threadsicher sind" (wörtlich aus dem zweiten Absatz zitiert). Die altenjava.util
Klassen haben dagegen mehrere Probleme. Mir ist klar, dass sich diese Antwort auf letztere bezieht, aber es ist jetzt wichtig, diese Unterscheidung zu treffen.Das java.time- Framework ersetzt sowohl ältere Datums- und Uhrzeitklassen als auch Joda-Time
Update: Die alten Datums- / Uhrzeitklassen, die mit den frühesten Versionen von Java ausgeliefert wurden, sind jetzt veraltet und werden offiziell durch die in Java 8, Java 9 und höher integrierten java.time-Klassen ersetzt .
Date
,Calendar
,SimpleDateFormat
Und diejava.sql.*
Datum-Zeit - Klassen alle sollen vermieden werden. Es besteht nie die Notwendigkeit, diese verwirrenden, lästigen und schlecht designten Klassen zu verwenden. Sie werden vollständig durch java.time-Klassen ersetzt. Ihr einziger Zweck ist jetzt die Pflege des vorhandenen alten Codes. Wenn Sie mit altem Code arbeiten, können Sie zu / von java.time konvertieren, indem Sie neue Methoden aufrufen, die den alten Klassen hinzugefügt wurden. Weitere Informationen zum Konvertieren finden Sie unter: Konvertieren von java.util.Date in den Typ "java.time". .Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den java.time- Klassen. Das Joda-Time-Projekt hat das java.time-Framework inspiriert. Beide werden von demselben Mann geführt, Stephen Colebourne . Sie können sich java.time als ein Umschreiben / Neugestalten von Joda-Time vorstellen. Dabei handelt es sich um neuen Code, bei dem jedoch das verwendet wird, was im Laufe der Jahre aus der Erstellung der ersten umfassenden und ausgefeilten Date-Time-Bibliothek der Branche gelernt wurde.
Weitere Informationen finden Sie im Oracle-Tutorial . Durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen.
Ein Großteil der java.time-Funktionalität wird in ThreeTen-Backport auf Java 6 & 7 zurückportiert und in ThreeTenABP auf Android angepasst (siehe Verwendung… ).
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle