Konvertieren Sie java.util.Date in String

1. Übersicht

In diesem Tutorial zeigen wir , wie wir können konvertieren Datum Objekte String - Objekte in Java . Dazu arbeiten wir mit dem älteren Typ java.util.Date sowie mit der neuen Datums- / Uhrzeit- API, die in Java 8 eingeführt wurde.

Wenn Sie lernen möchten, wie Sie die umgekehrte Konvertierung durchführen, dh von String- zu Datumstypen , können Sie dieses Tutorial hier lesen.

Weitere Informationen zur neuen Datums- / Uhrzeit- API finden Sie in diesem Tutorial.

2. Konvertieren von java.util.Date in String

Obwohl wir java.util.Date nicht verwenden sollten, wenn wir mit Java 8 arbeiten, haben wir manchmal keine Wahl (z. B. erhalten wir das Date- Objekt von einer Bibliothek, die nicht in unserer Kontrolle liegt).

In solchen Fällen haben wir verschiedene Möglichkeiten, java.util.Date in String zu konvertieren .

2.1. Vorbereiten des Datums Object

Lassen Sie uns zunächst eine erwartete String- Darstellung unseres Datums deklarieren und ein Muster des gewünschten Datumsformats definieren:

private static final String EXPECTED_STRING_DATE = "Aug 1, 2018 12:00 PM"; private static final String DATE_FORMAT = "MMM d, yyyy HH:mm a";

Jetzt benötigen wir das aktuelle Date- Objekt, das wir konvertieren möchten. Wir werden eine Kalenderinstanz verwenden , um sie zu erstellen:

TimeZone.setDefault(TimeZone.getTimeZone("CET")); Calendar calendar = Calendar.getInstance(); calendar.set(2018, Calendar.AUGUST, 1, 12, 0); Date date = calendar.getTime();

Wir haben Standard festgelegt Time - Zone zu CET Problemen zu verhindern , wenn später mit der neuen API arbeiten. Wir sollten beachten, dass das Datum selbst keine Zeitzone hat, aber sein toString () verwendet die aktuelle Standardzeitzone .

Wir werden diese Datumsinstanz in allen folgenden Beispielen verwenden.

2.2. Verwenden der SimpleDateFormat- Klasse

In diesem Beispiel verwenden wir die format () -Methode der SimpleDateFormat- Klasse. Erstellen wir eine Instanz davon mithilfe unseres Datumsformats:

DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);

Danach können wir unser Datum formatieren und mit der erwarteten Ausgabe vergleichen:

String formattedDate = formatter.format(date); assertEquals(EXPECTED_STRING_DATE, formattedDate);

2.3. Verwenden der Abstract DateFormat- Klasse

Wie wir gesehen haben könnten, ist SimpleDateFormat eine Unterklasse der abstrakten DateFormat- Klasse. Diese Klasse bietet verschiedene Methoden zur Formatierung von Datum und Uhrzeit.

Wir werden es verwenden, um die gleiche Ausgabe wie oben zu erzielen:

String formattedDate = DateFormat .getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT) .format(date);

Mit diesem Ansatz übergeben wir Stilmuster - in unserem Fall MITTEL für das Datum und KURZ für die Zeit.

3. Mit der Formatter - Klasse

Eine andere einfache Möglichkeit, denselben String wie in früheren Beispielen abzurufen, ist die Verwendung der Formatter- Klasse.

Dies ist möglicherweise nicht die am besten lesbare Lösung, es handelt sich jedoch um einen threadsicheren Einzeiler , der insbesondere in einer Umgebung mit mehreren Threads nützlich sein kann (wir sollten berücksichtigen, dass SimpleDateFormat nicht threadsicher ist):

String formattedDate = String.format("%1$tb %1$te, %1$tY %1$tI:%1$tM %1$Tp", date);

Wir haben 1 $ verwendet, um anzuzeigen, dass wir nur ein Argument übergeben, das für jedes Flag verwendet werden soll. Eine ausführliche Erläuterung der Flags finden Sie im Teil Datums- / Zeitkonvertierungen der Formatter- Klasse.

4. Konvertieren mit der Java 8 Datums- / Uhrzeit-API

Die Datums- / Zeit- API von Java 8 ist weitaus leistungsfähiger als die Klassen java.util.Date und java.util.Calendar , und wir sollten sie nach Möglichkeit verwenden. Mal sehen, wie wir es verwenden können, um unser vorhandenes Date- Objekt in String zu konvertieren .

Dieses Mal verwenden wir die DateTimeFormatter- Klasse und ihre format () -Methode sowie dasselbe Datumsmuster , das in Abschnitt 2.1 deklariert wurde:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT);

Um die neue API zu verwenden, müssen wir unser Date- Objekt in ein Instant- Objekt konvertieren :

Instant instant = date.toInstant();

Da unser erwarteter String sowohl Datums- als auch Zeitangaben enthält, müssen wir auch das Instant- Objekt in LocalDateTime konvertieren :

LocalDateTime ldt = instant .atZone(ZoneId.of("CET")) .toLocalDateTime();

Und schließlich können wir leicht unseren formatierten String erhalten :

String formattedDate = ldt.format(formatter);

5. Schlussfolgerung

In diesem Artikel haben wir verschiedene Möglichkeiten zum Konvertieren von java.util.Date- Objekten in String veranschaulicht . Wir haben zuerst gezeigt, wie das mit den älteren Klassen java.util.Date und java.util.Calendar und den entsprechenden Datumsformatierungsklassen gemacht wird.

Dann verwendeten wir die Formatter- Klasse und schließlich die Java 8-Datums- / Zeit-API.

Wie immer finden Sie den vollständigen Quellcode auf GitHub.