Konvertieren Sie zwischen Zeichenfolge und Zeitstempel

1. Übersicht

Der Zeitstempel ist eines der wenigen älteren Datums- und Uhrzeitobjekte in Java.

In diesem Tutorial erfahren Sie, wie Sie einen String- Wert von einem String- Wert in ein Timestamp- Objekt analysieren und ein Timestamp- Objekt in einen String formatieren .

Und da Timestamp auf einem Java-eigenen Format basiert , werden wir sehen, wie wir uns effektiv anpassen können.

2. Analysieren Sie einen String in einen Zeitstempel

2.1. Standardformat

Der einfachste Weg, einen String in einen Zeitstempel zu analysieren , ist die valueOf- Methode:

Timestamp.valueOf("2018-11-12 01:02:03.123456789")

Und wenn unser String im JDBC-Zeitstempelformat vorliegt - JJJJ-m [m] -t [d] hh: mm : ss [.f…] - dann ist es ziemlich einfach.

Wir können dieses Muster folgendermaßen interpretieren:

Muster Beschreibung Beispiel
JJJJ Stellt das Jahr dar und muss vierstellig sein. 2018
m [m] Für die Monatskomponente müssen wir entweder eine oder zwei Ziffern haben (von 1 bis 12). 1, 11
d [d] Für den Tag des Monats müssen wir entweder eine oder zwei Ziffern haben (von 1 bis 31). 7, 12
hh Steht für die Stunde des Tages mit zulässigen Werten von 0 bis 23. 01, 16
mm Steht für Minuten der Stunde mit zulässigen Werten von 0 bis 59. 02, 45
ss Steht für Sekunden in der Minute mit zulässigen Werten von 0 bis 59. 03, 52
[.f…] Stellt optionale Sekundenbruchteile dar und kann bis zu Nanosekunden genau sein, sodass die zulässigen Werte zwischen 0 und 999999999 liegen. 12, 1567, 123456789

2.2. Alternative Formate

Wenn es nicht im JDBC-Zeitstempelformat vorliegt , verwendet valueOf zum Glück auch eine LocalDateTime- Instanz.

Dies bedeutet, dass wir ein Datum in einem beliebigen Format annehmen können. Wir müssen es nur zuerst in ein LocalDateTime konvertieren :

String pattern = "MMM dd, yyyy HH:mm:ss.SSSSSSSS"; String timestampAsString = "Nov 12, 2018 13:02:56.12345678"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(timestampAsString));

Und dann können wir valueOf verwenden, das wir zuvor getan haben:

Timestamp timestamp = Timestamp.valueOf(localDateTime); assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Hinweis, dass Übergeben, im Gegensatz zu einem Datum des Gegenstandes, ein Zeitstempel - Objekt ist in der Lage von Bruchteilen einer Sekunde zu speichern.

3. Formatieren Sie einen Zeitstempel als Zeichenfolge

Um einen Zeitstempel zu formatieren , haben wir die gleiche Herausforderung, da das Standardformat das proprietäre JDBC-Zeitstempelformat ist:

assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Aber auch hier können wir mithilfe einer Zwischenkonvertierung den resultierenden String auf ein anderes Datums- und Zeitmuster formatieren , wie z. B. den ISO-8601-Standard:

Timestamp timestamp = Timestamp.valueOf("2018-12-12 01:02:03.123456789"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; String timestampAsString = formatter.format(timestamp.toLocalDateTime()); assertEquals("2018-12-12T01:02:03.123456789", timestampAsString);

4. Fazit

In diesem Artikel haben wir gesehen, wie zwischen String- und Timestamp- Objekten in Java konvertiert wird . Außerdem haben wir gesehen, wie die LocalDateTime- Konvertierung als Zwischenschritt verwendet wird, um in und von verschiedenen Datums- und Zeitmustern zu konvertieren.

Und stellen Sie sicher, dass Sie all diese Beispiele und Schnipsel auf GitHub finden.