Konvertiere zwischen String und Timestamp

Zwischen Zeichenfolge und Zeitstempel konvertieren

1. Überblick

Timestamp ist eines der wenigen älteren Datums- / Uhrzeitobjekte in Java.

In diesem Tutorial erfahren Sie, wie Sie den Wert vonStringzu einem Objekt vonTimestampanalysieren und ein Objekt vonTimestampzu einem Objekt vonString.formatieren

Und daTimestamp auf einem Java-proprietären Format basiert, werden wir sehen, wie wir uns effektiv anpassen können.

2. Analysieren Sie aString auf aTimestamp

2.1. Standardformat

Der einfachste Weg, aString bis aTimestamp zu analysieren, ist dievalueOf -Smethodik:

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

Und wenn unserString im JDBC-Zeitstempelformat ist -yyyy-m[m]-d[d] hh:mm: _ss [.f…] _ - dann ist es ziemlich einfach.

Wir können dieses Muster folgendermaßen interpretieren:

Muster Beschreibung Beispiel

yyyy

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, nimmtvalueOf zum Glück auch eineLocalDateTime -Sinstanz ein.

This means we can take a date in any format, müssen wir nur zuerstconvert it into a LocalDateTime:

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 wirvalueOf verwenden, die wir zuvor gemacht haben:

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

Beachten Sie im Vorbeigehen, dassunlike a Date object, a Timestamp object is capable of storing fractions of a second.

3. Formatieren Sie aTimestamp alsString

Um einTimestampzu 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 die resultierendenString 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 zwischenString undTimestamp Objekten in Java konvertiert wird. Außerdem haben wir gesehen, wie die Konvertierung vonLocalDateTimeals Zwischenschritt verwendet wird, um in und von verschiedenen Datums- und Zeitmustern zu konvertieren.

Und stellen Sie sicher, dass Sie alle diese Beispiele und Snippetsover on GitHub finden.