Ich habe die Datums- und Zeit-API (JSR 310 []), die bisher aus Java SE 8 stammt, nicht verwendet (da ich mit Joda-Time [] nicht besonders unzufrieden war), habe sie aber neulich nachgeschlagen. Ich fand das Designkonzept interessant, also werde ich es schreiben.
Da es viele java.time.chrono [] gibt, die Kalender wie den japanischen Kalender enthalten, scheint die Anzahl der Klassen groß zu sein.
Paket | Überblick | Schnittstelle | Klasse | Aufzählungstyp | Ausnahme |
---|---|---|---|---|---|
java.time | Haupt-API | 0 | 15 | 2 | 1 |
java.time.chrono | Kalender wie japanischer Kalender[^chrono] | 6 | 11 | 4 | 0 |
java.time.format | Analyse / Ausgabe | 0 | 3 | 4 | 1 |
java.time.temporal | Zeit einstellen[^temporal] | 7 | 6 | 2 | 1 |
java.time.zone | Zeitzone | 0 | 4 | 1 | 1 |
gesamt | 13 | 39 | 13 | 4 |
java.time [] Auf den ersten Blick gibt es unten viele Klassen, aber viele davon entsprechen den Wörtern, die Sie normalerweise verwenden, sodass Sie sie leicht schlucken können.
Es gibt nur eine veränderbare Klasse, java.time.format.DateTimeFormatterBuilder []. Es gibt Dinge, die nicht unveränderlich sein müssen, wie java.time.temporal.TemporalAdjuster [], aber sie sagen Ihnen freundlich (sauer Ihren Mund?), Dass Sie sie unveränderlich machen sollten.
Implementierungsanforderungen: Diese Schnittstelle beschränkt die Implementierung nicht auf Variablen, es wird jedoch dringend empfohlen, sie unveränderlich zu machen.
Zusätzlich zu den Standardwörtern "get" und "to" werden die folgenden Wörter als Methodenpräfixe verwendet. Sie können auch "with", "plus" und "minus" in Joda-Time [] finden.
of
: int etc.from
: Von einem anderen Objektat
: Kombinieren, um eine weitere Instanz zu erstellen (MonthDay + Year → LocalDate usw.)with
: Ändern Sie einige Teile, um eine andere Instanz zu erstellen (z. B. ändern Sie nur das Jahr mit LocalDate # withYear ()).plus
, minus
: Addiere und subtrahiere, um eine weitere Instanz zu erstellenDie meisten Klassen verwenden keine Vererbung (direkt von Object erben), mit Ausnahme von Ausnahmeklassen. Joda-Time Dies steht im Gegensatz zu Joda-Time.javadoc, bei dem die Vererbung stark genutzt wurde. Selbst bei Verwendung der Vererbung erbt die abstrakte Basisklasse Object direkt, und die geerbte Unterklasse ist endgültig, um eine tiefe Vererbung zu vermeiden.
Java.nio.Path [], das aus Java SE 7 eingeführt wurde, kann mit den vorhandenen Dateien java.io.File [] und toFile ()
, toPath ()
ineinander konvertiert werden. Ich werde. Andererseits wird die gegenseitige Konvertierung mit der alten API nur auf der alten API-Seite implementiert.
Ich hatte das Gefühl, dass ** du (bestehende Klasse) auf den Boden von java.time ** treten darfst. Zunächst scheint es, dass keine gegenseitige Umwandlung vorbereitet wurde [^ 1], und ich fühlte sogar einen Groll gegen die alte API (ヽ ´ω`)
Es ist auch in Effective Java geschrieben, aber ich sympathisiere damit, weil es unerwartete Fehler verursachte, indem es nicht unveränderlich gemacht wurde, und es wurde ohne Erlaubnis geerbt und geweint, weil es nicht finalisiert wurde. Es gibt viele Orte zu tun. Ich werde es in Zukunft aktiv nutzen.
[^ 1]: Datums- und Uhrzeit-API-Tipps für Japanisch (ja) --notepad