Einfache Möglichkeit zum konvertieren von Java 8 ist LocalDateTime zu Joda ' s LocalDateTime
Gibt es eine einfache Möglichkeit zu konvertieren Java 8 LocalDateTime zu Joda ' s LocalDateTime?
Einer der Wege ist, es zu konvertieren in String und erstellen Sie dann Joda ist LocalDateTime aus dieser Zeichenfolge.
Wandeln Sie es in eine ISO-formatierte
Ja. Ich habe die gleiche Art und Weise.
Warum wollen Sie verwenden, Joda Time, wenn Sie bereits
Ich bin mit java.Zeit in meiner Anwendung. Meine Applikationen von einer Bibliothek abhängig, die mit Joda time. Dies ist ein spezieller Fall, wo ich diese Umstellung.
String
und analysieren es wieder zurück. Konvertieren Sie es in Millisekunden seit Beginn der EpocheJa. Ich habe die gleiche Art und Weise.
Warum wollen Sie verwenden, Joda Time, wenn Sie bereits
java.time
?Ich bin mit java.Zeit in meiner Anwendung. Meine Applikationen von einer Bibliothek abhängig, die mit Joda time. Dies ist ein spezieller Fall, wo ich diese Umstellung.
InformationsquelleAutor Naresh | 2015-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren durch Epoche millis (im wesentlichen ein
java.util.Date()
):Einzelne Linie, sondern lange, so "einfach"? Es ist alles relativ.
InformationsquelleAutor Andreas
Beide localDate Typen bestehen aus
(year, month, date)
, so kopieren Sie einfach diese Werte:InformationsquelleAutor araqnid
Eine etwas kürzere Methode:
Wenn Sie können Weg mit der Verwendung einer
ZoneOffset
statt einerZoneId
dann der code möglicherweise etwas gekürzt.Den Aufruf der
atZone()
- Methode gelöscht werden können, durch die Bereitstellung der Zeitzonenoffset zu dertoInstant()
Methode.Ausführlichere Erklärung
Nur um zu klären, den Schritt, den ich entfernt habe ist mit der Erstellung der Mittelstufe ZonedDateTime Objekt. Dieser Teil der Sequenz ist immer noch mit der Java-8-API, bevor etwas zu tun mit Joda.
Den Prozess der Umwandlung erste betrifft die Umwandlung des Java-8 LocalDateTime der Anzahl von millis seit Beginn der Epoche zurück. Erreicht werden kann dies in ein paar verschiedene Möglichkeiten. Zum Beispiel in Andreas' Antwort:
Oder meine alternative:
Der Unterschied ist, dass ich bin skipping erstellen eines Java-8 ZonedDateTime und stattdessen die übergabe der Zeitzonenoffset zu der
toInstant()
Methode.Ab diesem Punkt auf die beiden Antworten sind die gleichen.
Vorbehalte
Dies funktioniert gut, wenn die Umwandlung mit einem gleichmäßigen Aufmaß, wo keine Sommerzeit-änderungen gelten. Zum Beispiel UTC ist immer +0:00. Wenn Sie brauchen, um zu konvertieren, um eine lokale Zeitzone in der sich der offset ändern können, dann müssen Sie die etwas längere Antwort mit
atZone()
Einen LocalDateTime mit beiden API (Java 8 und Joda) ist ein DateTime ohne Zeitzone. Allerdings, wenn Sie die Anzahl der millis seit Beginn der Epoche zurück, dann müssen Sie einen offset zu ermitteln Datum und Zeit. Die Java 8 API erfordert entweder eine Aufrechnung oder die Zeitzone explizit zu übergeben, in der Erwägung, dass die Joda-API verwenden, wird der system-Standardwert, falls keine übergeben wird.
Einer genaueren Weise zu konstruieren, die Joda LocalDateTime wäre:
Diese verwenden die Zeitzone während der Konstruktion, um die korrekte Uhrzeit und das Datum. Sobald der Konstruktor abgeschlossen ist die Zeitzone wird nicht Teil des Objekts seit LocalDateTime hat keine Zeitzone.
java8LDT.toInstant(ZoneOffset.UTC).toEpochMilli()
zu einem anderen Ergebnis führt alsjava8LDT.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
für das system nicht läuft systemDefault UTC!!Sie können erhalten Sie die passende offset von
ZoneId.systemDefault().getRules().getOffset(java8LDT)
, aber ich denkeatZone(..).toInstant()...
ist weit mehr einfach.Es war nur ein Beispiel! In der Praxis würde man das auch nicht nennen
.now()
in Java 8 und konvertieren Joda, wenn Sie nur könnten Holen Sie sich die aktuelle Uhrzeit direkt von Joda. Sie müssen wissen, das implizite Zeitzone, gilt fürjava8LDT
und den richtigen offset. Ich kann sehen, warum das Beispiel möglicherweise Irre wenn..now()
war nicht der Punkt. Der Unterschied ist die Verwendung vonsystemDefault
stattZoneOffset.UTC
. Also den code von der gewählten Antwort läuft auf jeder Maschine, egal welche Zeitzone ist systemDefault.Und natürlich sollte man nicht immer verwenden
systemDefault()
und ich habe nie gesagt, dass.InformationsquelleAutor Ben Thurley