---
title: 'Parsen und Formatieren von Datumszeitwerten der Java Date Time API'
url: 'https://tutego.de/blog/javainsel/2017/06/parsen-und-formatieren-von-datumszeitwerten-der-java-date-time-api'
markdown: 'https://tutego.de/blog/javainsel/2017/06/parsen-und-formatieren-von-datumszeitwerten-der-java-date-time-api.md'
date: '2017-06-16'
description: 'Alle temporalen Typen überschreiben standardmäßig die toString()-Methode und liefern eine standardisierte Ausgabe. Weiterhin lassen sich die temporalen Typen auch bei String.format(…) und dem java.util.Formatter einsetzen. format(…)-Methode Daneben bieten die Typen eine format(…)-Methode, der ein F…'
taxonomy:
  category:
    - Allgemein
    - Insel
    - 'Java 8'
---

# Parsen und Formatieren von Datumszeitwerten der Java Date Time API

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Parsen und Formatieren von Datumszeitwerten der Java Date Time API

16.06.2017 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Alle temporalen Typen überschreiben standardmäßig die `toString()`-Methode und liefern eine standardisierte Ausgabe. Weiterhin lassen sich die temporalen Typen auch bei `String.format(…)` und dem `java.util.Formatter` einsetzen.

#### `format(…)`-Methode

Daneben bieten die Typen eine `format(…)`-Methode, der ein Formatierungsobjekt übergeben wird, sodass individuelle Ausgaben nach einem Muster möglich sind.

KlasseFormatierungsmethodeLocalDateTimeformat(DateTimeFormatter formatter)LocalDateformat(DateTimeFormatter formatter)LocalTimeformat(DateTimeFormatter formatter)ZonedDateTimeformat(DateTimeFormatter formatter)OffsetDateTimeformat(DateTimeFormatter formatter)

Temporale Klassen nutzen den gleiche Parametertyp DateTimeFormatter

Die `format(…)`-Methode nimmt einen DateTimeFormatter an, der die Ausgabe beschreibt. Wie kommen wir an einen DateTimeFormatter? Die Klasse hat keinen öffentlichen Konstruktor, sondern Konstanten und statische Fabrikmethoden. Über drei Varianten kommen wir zum konkreten Objekt:

- Es gibt vordefinierte Konstanten für standardisierte ISO/RFC-Ausgaben,
- Methoden für vordefinierte lang/kurz-Formate (auch lokalisiert) und
- Methoden für komplett selbst zusammengestellte Ausgaben.

Die API-Dokumentation zählt die Konstanten mit ihren Formaten aus, Beispiele sind ISO\_LOCAL\_DATE oder ISO\_ZONED\_DATE\_TIME. Wichtig zu bedenken ist, dass der temporale Typ die Felder auch haben muss! Ein ISO\_ZONED\_DATE\_TIME ist zum Beispiel bei einem `LocalDate` nicht möglich.

Praktischer sind die statischen `ofLocalizedXXX(…)`-Methoden, die eine Aufzählung FormatStyle (FULL, LONG, MEDIUM, SHORT) annehmen:

- `DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)`
- `DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)`
- `DateTimeFormatter ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle)`
- `DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)`

Einen so aufgebauten DateTimeFormatter lässt sich Zusatzinformation geben mit diversen `withXXX(…)`-Methoden, etwa `withLocale(Locale locale)` oder `withZone(ZoneId zone)`.

Beispiel

```java
LocalDateTime now = LocalDateTime.now();

out.println( now.format( BASIC_ISO_DATE ) );

out.println( now.format( ISO_LOCAL_DATE_TIME ) );

out.println( now.format( ofLocalizedDate( SHORT ) ) );

out.println( now.format( ofLocalizedDateTime( MEDIUM ) ) );

out.println( now.format( ofLocalizedDateTime( FULL ).withLocale( FRANCE )

                                                    .withZone( ZoneId.of( "America/Cayenne" ) ) ) );
```

Die Ausgaben sehen so aus:

20170616

2017-06-16T20:39:11.2114379

16.06.17

16.06.2017, 20:39:11

vendredi 16 juin 2017 à 20:39:11 heure de la Guyane française

Eine völlig flexible Ausgabe ermöglicht ein Muster.

Beispiel

```java
LocalDate now = LocalDate.now();
System.out.println( now ); // 2014-03-21
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "d. MMMM yyyy" );
String nowAsString = now.format( formatter );
System.out.println( nowAsString ); // 21. März 2014
LocalDate nowAgain = LocalDate.parse( nowAsString, formatter );
System.out.println( nowAgain ); // 2014-03-21
```

Die API-Dokumentation zu DateTimeFormatter zeigt einige vordefinierte Formatierungsobjekte und listet alle Formatspezifizierer auf.

#### `parse(…)`-Methode

Neben dem Formatieren bieten die Typen auch eine statische `parse(…)`-Methode, die einmal mit einem `String`-Parameter das Format erwartet, was `toString()` liefert, und eine Version mit zwei Parametern, wobei dann ein Formatierungsobjekt erlaubt ist, um genau das Format anzugeben, nach dem geparst werden soll.

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/), [Insel](https://tutego.de/blog/javainsel/category/insel/), [Java 8](https://tutego.de/blog/javainsel/category/java-8/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Asynchrones Programmieren mit CompletableFuture (CompletionStage)](https://tutego.de/blog/javainsel/2017/06/asnychrones-programmieren-mit-completablefuture-completionstage.md)
- Next: [JAXB-Beans aus XML-Schema-Datei generieren](https://tutego.de/blog/javainsel/2017/06/jaxb-beans-aus-xml-schema-datei-generieren.md)
