Konvertieren Sie zwischen java.time.Instant und java.sql.Timestamp

1. Übersicht

Sowohl die Klassen java.time.Instant als auch java.sql.Timestamp repräsentieren einen Punkt auf der Zeitachse in UTC. Mit anderen Worten, sie repräsentieren die Anzahl der Nanosekunden seit der Java-Epoche.

In diesem kurzen Tutorial konvertieren wir mithilfe der integrierten Java-Methoden eine in die andere.

2. Sofortiges Konvertieren in Zeitstempel und Zurück

Wir können Timestamp.from () verwenden , um Instant s in Timestamps zu konvertieren :

Instant instant = Instant.now(); Timestamp timestamp = Timestamp.from(instant); assertEquals(instant.toEpochMilli(), timestamp.getTime());

Und umgekehrt können wir Timestamp.toInstant () verwenden , um Timestamp s in Instant s zu konvertieren :

instant = timestamp.toInstant(); assertEquals(instant.toEpochMilli(), timestamp.getTime());

In beiden Fällen repräsentieren sowohl der Sofort- als auch der Zeitstempel denselben Punkt auf der Zeitachse.

Schauen wir uns als nächstes die Interaktion zwischen den beiden Klassen und der Zeitzone an.

3. Unterschiede in der toString () -Methode

Das Aufrufen von toString () in Instant und Timestamp verhält sich in Bezug auf die Zeitzone unterschiedlich. Instant.toString () gibt die Zeit in der UTC-Zeitzone zurück. Andererseits gibt Timezone.toString () die Zeit in der Zeitzone des lokalen Computers zurück.

Mal sehen , was wir bekommen , wenn Aufruf toString () auf sofortige und Zeitzone jeweils:

Instant (in UTC): 2018-10-18T00:00:57.907Z Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907

Hier führte timestamp.toString () zu einer Zeit, die 5 Stunden 30 Minuten nach der vom instant.toString () zurückgegebenen Zeit liegt. Dies liegt daran, dass die Zeitzone des lokalen Computers bei GMT +5: 30 liegt.

Die Ausgabe der toString () -Methode ist unterschiedlich, aber sowohl der Zeitstempel als auch der Zeitpunkt repräsentieren denselben Punkt auf der Zeitachse .

Wir können dies auch überprüfen, indem wir den Zeitstempel in die UTC-Zeitzone konvertieren :

DateFormat df = DateFormat.getDateTimeInstance(); df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SS'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); assertEquals(instant.toString(), df.format(timestamp).toString());

4. Fazit

In diesem kurzen Tutorial haben wir gesehen, wie die Klassen java.time.Instant und java.sql.Timestamp in Java mithilfe integrierter Methoden konvertiert werden.

Wir haben uns auch angesehen, wie sich die Zeitzone auf die Änderung der Ausgabe auswirkt.

Und wie immer sind die vollständigen Codebeispiele auf GitHub verfügbar.