Konvertieren Sie einen String in ein Datum in Java

1. Übersicht

In diesem Tutorial werden wir mehr Möglichkeiten , zu konvertieren erforschen String - Objekte in Datum Objekte . Wir beginnen mit der neuen Date Time API - java.time , die in Java 8 eingeführt wurde, bevor wir uns den alten Datentyp java.util.Date 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 Lang DateUtils- Klasse ansehen .

2. Konvertieren von String zu LOCALDATE oder Local

LocalDate und LocalDateTime sind 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 wir also eine Zeichenfolge haben, die ein Datum und eine Uhrzeit in diesem Format darstellt, können wir die parse () -API dieser Klassen direkt verwenden .

Hier ist ein bisschen mehr Detail zu dieser neuen API.

2.1. Verwenden der Parse- API

Die Datums- / Uhrzeit -API bietet parse () -Methoden zum Parsen eines Strings , der Datums- und Zeitinformationen enthält. Um String-Objekte in LocalDate- und LocalDateTime- Objekte zu konvertieren , muss der String ein gültiges Datum oder eine gültige Uhrzeit gemäß ISO_LOCAL_DATE oder ISO_LOCAL_DATE_TIME darstellen.

Andernfalls wird zur Laufzeit eine DateTimeParseException ausgelöst.

In unserem ersten Beispiel konvertieren wir einen String in eine java.time . LocalDate :

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

Ein ähnlicher Ansatz wie oben kann verwendet werden, um einen String in eine java.time zu konvertieren . LocalDateTime :

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

Es ist wichtig zu beachten, dass sowohl das LocalDate- als auch das LocalDateTime- Objekt zeitzonenunabhängig sind. Doch wenn wir mit Zeitzone bestimmten Datum und Zeit beschäftigen müssen, können wir die Verwendung ZonedDateTime Parse - Methode direkt eine Zeitzone Datum und eine Uhrzeit 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 der Parse- API mit einem benutzerdefinierten Formatierer

Das Konvertieren eines Strings mit einem benutzerdefinierten Datumsformat in ein Datumsobjekt ist in Java weit verbreitet.

Zu diesem Zweck verwenden wir die DateTimeFormatter- Klasse, die zahlreiche vordefinierte Formatierer bereitstellt und es uns ermöglicht, einen Formatierer zu definieren.

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

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 d yyyy" anwendet. Dieses Format gibt drei Zeichen für den vollständigen Tagnamen der Woche an, 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 " Fr, 3. Januar 2003" oder "Mi, 23. März 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)

Klicken Sie hier, um eine vollständige Liste der Symbole anzuzeigen, mit denen Sie ein Muster für die Analyse angeben können.

Wenn wir java.time- Daten in das ältere java.util.Date- Objekt konvertieren müssen , lesen Sie diesen Artikel für weitere Details.

3. Konvertieren eines Strings in java.util.Date

Vor Java 8 wurde der Java-Mechanismus für Datum und Uhrzeit von den alten APIs der Klassen java.util.Date , java.util.Calendar und java.util.TimeZone bereitgestellt, mit denen wir manchmal noch arbeiten müssen.

Let's see how to convert a String into a java.util.Date object:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); String dateInString = "7-Jun-2013"; Date date = formatter.parse(dateInString);

In the above example, we first need to construct a SimpleDateFormat object by passing the pattern describing the date and time format.

Next, we need to invoke the parse() method passing the date String. If the String argument passed is not in the same format as the pattern then a ParseException will be thrown.

3.1. Adding Time Zone Information to java.util.Date

It's important to note that the java.util.Date has no concept of time zone, and only represents the number of seconds passed since the Unix epoch time – 1970-01-01T00:00:00Z.

But, when we print the Date object directly, it will always be printed with the Java default system time zone.

In this final example we'll look at how to format a date, adding time zone information:

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);

We can also change the JVM time zone programmatically, but this isn't recommended:

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

4. External Libraries

Now that we have a good understanding of how to convert String objects to Date objects using the new and old APIs offered by core Java let's take a look at some external libraries.

4.1. Joda-Time Library

An alternative to the core Java Date and Time library is Joda-Time. Although the authors now recommend users to migrate to java.time (JSR-310) if this isn't possible then the Joda-Time library provides an excellent alternative for working with Date and Time. This library provides pretty much all capabilities supported in the Java 8 Date Time project.

The artifact can be found on Maven Central:

 joda-time joda-time 2.10 

Here’s a quick example working with the standard DateTime:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse(dateInString, formatter);

Let's also see an example of explicitly setting a time zone:

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 DateUtils Klasse bietet viele nützliche Dienstprogramme es einfacher, die Arbeit mit dem Erbe machen Kalender und Datum der Objekte .

Das Artefakt commons-lang3 ist bei Maven Central erhältlich:

 org.apache.commons commons-lang3 3.7 

Lassen Sie sich ein Datum umwandeln String mit einem Array von Datum Mustern in eine java.util.Date :

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

5. Schlussfolgerung

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

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