String in Java in Datum konvertieren

Konvertieren Sie String in Datum in Java

1. Überblick

In diesem Tutorial werdenwe’ll explore several ways to convert String objects into Date objects. Wir beginnen mit der neuenDate Time-API -java.time, die in Java 8 eingeführt wurde, bevor wir uns den altenjava.util.Date-Datentyp ansehen, der auch zur Darstellung von Datumsangaben verwendet wird.

Zum Abschluss werden wir uns auch einige externe Bibliotheken für die Konvertierung mit Joda-Time und der Apache Commons LangDateUtils-Klasse ansehen.

2. Konvertieren vonString inLocalDate oderLocalDateTime

[.s1]#LocalDate #and LocalDateTime are unveränderliche Datums- / Uhrzeitobjekte, die ein Datum und zuletzt ein Datum und eine Uhrzeit darstellen. Standardmäßig haben Java-Daten das ISO-8601-Format. Wenn also eine Zeichenfolge vorhanden ist, die ein Datum und eine Uhrzeit in diesem Format darstellt, dannwe can use the parse() API of these classes directly.

Hereist etwas detaillierter zu dieser neuen API.

2.1. Verwenden derParse-API

The Date-Time API provide parse() methods for parsing a String that contains date and time information. To convert String objects to LocalDate and LocalDateTime objects, the String must represent a valid date or time gemäßISO_LOCAL_DATE oderISO_LOCAL_DATE_TIME.

Andernfalls wird zur Laufzeit einDateTimeParseException ausgelöst.

In unserem ersten Beispiel konvertieren wir einString in einjava.time.LocalDate:

LocalDate date = LocalDate.parse("2018-05-05");

Ein ähnlicher Ansatz wie oben kann verwendet werden, umString injava.time umzuwandeln.LocalDateTime:

LocalDateTime dateTime = LocalDateTime.parse("2018-05-05T11:50:55");

Es ist wichtig zu beachten, dass sowohl die ObjekteLocalDate als auchLocalDateTime zeitzonenunabhängig sind. when we need to deal with time zone specific date and times we can use the ZonedDateTimeparse Methode direkt, um eine zeitzonenspezifische Datums- und Uhrzeitangabe zu erhalten:

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2015-05-05T10:15:30+01:00[Europe/Paris]");

Schauen wir uns nun an, wie wir Zeichenfolgen mit einem benutzerdefinierten Format konvertieren.

2.2. Verwenden derParse-API mit einem benutzerdefinierten Formatierer

Das Konvertieren vonString mit einem benutzerdefinierten Datumsformat in einDate-Objekt ist in Java weit verbreitet.

Zu diesem Zweck istwe’ll use the DateTimeFormatter class which provides numerous predefined formatters, und ermöglicht es uns, einen Formatierer zu definieren.

Beginnen wir mit einem Beispiel für die Verwendung eines der vordefinierten Formatierer vonDateTimeFormatter:

String dateInString = "19590709";
LocalDate date = LocalDate.parse(dateInString, DateTimeFormatter.BASIC_ISO_DATE);

Im nächsten Beispiel erstellen wir einen Formatierer, der das Format "EEE, MMM JJJJ" anwendet. In diesem Format werden drei Zeichen für den vollständigen Namen des Tages der Woche angegeben, eine Ziffer für den Tag des Monats, drei Zeichen für den Monat und vier Ziffern für das Jahr.

Dieser Formatierer erkennt Zeichenfolgen wie „Fri,  3 Jan 2003″ or “Wed, 23 Mar 1994“:

String dateInString = "Mon, 05 May 1980";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, d MMM yyyy", Locale.ENGLISH);
LocalDate dateTime = LocalDate.parse(dateInString, formatter);

2.3. Gemeinsame Datums- und Zeitmuster

Schauen wir uns einige gängige Datums- und Zeitmuster an:

  • y – Jahr (1996; 96)

  • M – Monat im Jahr (Juli; Juli; 07)

  • d - Tag im Monat (1-31)

  • E - Tagesname in der Woche (Freitag, Sonntag)

  • a Am / pm-Marker (AM, PM)

  • H - Stunde am Tag (0-23)

  • h - Stunde in morgens / abends (1-12)

  • m - Minute in Stunde (0-60)

  • s - Sekunde in Minute (0-60)

Für eine vollständige Liste der Symbole, mit denen wir ein Muster zum Parsen angeben können, klicken Sie aufhere.

Wenn wirjava.time Daten in das älterejava.util.Date Objekt konvertieren müssen, lesen Sie den Artikel vonthisfür weitere Details.

3. Konvertieren vonString injava.util.Date

Before Java 8, the Java date and time mechanism was provided by the old APIs of java.util.Date, java.util.Calendar, and java.util.TimeZone classes, mit denen wir manchmal noch arbeiten müssen.

Mal sehen, wie man einen String in einjava.util.Date-Objekt konvertiert:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);

String dateInString = "7-Jun-2013";
Date date = formatter.parse(dateInString);

Im obigen Beispiel wirdwe first need to construct a SimpleDateFormat objectdurch Übergeben des Musters übergeben, das das Datums- und Uhrzeitformat beschreibt.

Als nächstes müssen wir dieparse()-Methode aufrufen, die das DatumString übergibt. Wenn das übergebene ArgumentStringnicht das gleiche Format wie das Muster hat, wird einParseException ausgelöst.

3.1. Hinzufügen von Zeitzoneninformationen zujava.util.Date

It’s important to note that the java.util.Date has no concept of time zone und gibt nur die Anzahl der Sekunden an, die seit der Unix-Epoche vergangen sind - 1970-01-01T00: 00: 00Z.

Wenn wir jedoch dasDate-Objekt direkt drucken, wird es immer mit der Java-Standardsystemzeitzone gedruckt.

In diesem letzten Beispiel sehen wir uns an, wie ein Datum formatiert wird, und fügen Zeitzoneninformationen hinzu:

SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a", Locale.ENGLISH);
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));

String dateInString = "22-01-2015 10:15:55 AM";
Date date = formatter.parse(dateInString);
String formattedDateString = formatter.format(date);

Wir können die JVM-Zeitzone auch programmgesteuert ändern, dies wird jedoch nicht empfohlen:

TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

4. Externe Bibliotheken

Nachdem wir nun ein gutes Verständnis dafür haben, wieString-Objekte mit den neuen und alten APIs von Core Java inDate Objekte konvertiert werden, werfen wir einen Blick auf einige externe Bibliotheken.

4.1. Joda-Time-Bibliothek

Eine Alternative zur Java-KernbibliothekDate undTime istJoda-Time. Obwohl die Autoren Benutzern jetzt empfehlen, aufjava.time (JSR-310) zu migrieren, wenn dies nicht möglich ist, dann aufJoda-Time library provides an excellent alternative for working with Date and Time. Diese Bibliothek bietet nahezu alle Funktionen, die im Java 8Date Time-Projekt unterstützt werden.

Das Artefakt befindet sich aufMaven Central:


    joda-time
    joda-time
    2.10

Hier ist ein kurzes Beispiel für die Arbeit mit den StandardDateTime:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");

String dateInString = "07/06/2013 10:11:59";
DateTime dateTime = DateTime.parse(dateInString, formatter);

Sehen wir uns auch ein Beispiel für das explizite Festlegen einer Zeitzone an:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");

String dateInString = "07/06/2013 10:11:59";
DateTime dateTime = DateTime.parse(dateInString, formatter);
DateTime dateTimeWithZone = dateTime.withZone(DateTimeZone.forID("Asia/Kolkata"));

4.2. Apache Commons Lang - DateUtils

Die KlasseDateUtils liefert vieleuseful utilities making it easier to work with the legacy Calendar and Date objects.

Das Artefakt commons-lang3 ist abMaven Central verfügbar:


    org.apache.commons
    commons-lang3
    3.7

Konvertieren wir ein DatumString unter Verwendung einesArray von Datumsmustern in einjava.util.Date:

String dateInString = "07/06-2013";
Date date = DateUtils.parseDate(dateInString,
  new String[] { "yyyy-MM-dd HH:mm:ss", "dd/MM-yyyy" });

5. Fazit

In diesem Artikel haben wir verschiedene Möglichkeiten zum Konvertieren von Strings in verschiedene Arten vonDate-Objekten (mit und ohne Zeit) dargestellt, sowohl in einfachem Java als auch unter Verwendung externer Bibliotheken.

Der vollständige Quellcode des Artikels ist inover on GitHub verfügbar.