---
title: java.time.Duration
url: 'https://tutego.de/blog/javainsel/2017/02/java-time-duration'
markdown: 'https://tutego.de/blog/javainsel/2017/02/java-time-duration.md'
date: '2017-02-21'
description: 'Eine Klasse Duration repräsentiert Dauern von Zeiten und ist weder mit Zeitzonen verbunden noch mit anderen Zeitleisten. Daher ist auch ein Tag idealisiert exakt 24 Stunden lang, Schaltsekunden kennt die Klasse nicht, und einen Tag zu addieren heißt, 24 Stunden aufzurechnen. Die interne Berechnungs…'
taxonomy:
  category:
    - Allgemein
    - Insel
    - 'Java 8'
    - 'Java 9'
---

# java.time.Duration

![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/)

## java.time.Duration

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

Eine Klasse `Duration` repräsentiert Dauern von Zeiten und ist weder mit Zeitzonen verbunden noch mit anderen Zeitleisten. Daher ist auch ein Tag idealisiert exakt 24 Stunden lang, Schaltsekunden kennt die Klasse nicht, und einen Tag zu addieren heißt, 24 Stunden aufzurechnen.

Die interne Berechnungseinheit ist Sekunden bzw. Nanosekunden, auch wenn Hilfsmethoden Zeiteinheiten bis Stunden erlauben. Darüber wird eine `Duration` auch aufgebaut, über `ofXXX()`-Methoden wie `ofSeconds(long seconds, long nanoAdjustment)` oder `ofDays(long days)`. Differenzen bildet wieder `Duration` `between(Temporal startInclusive, Temporal endExclusive)`, wobei Temporal eine Schnittstelle ist, die etwa von `LocalDate`, `LocalDateTime`, LocalTime, OffsetDateTime, OffsetTime, ZonedDateTime, Year, YearMonth, `Instant` implementiert wird, nicht aber von Period.

Beispiel: Wie viel Zeit vergeht zwischen der Ausführung?

```java
Instant start = Instant.now();
 try {
   Files.walk( Paths.get( System.getProperty( "user.home" ) ) ).count();
 } catch ( Exception e ) { }
 Instant end = Instant.now();
 System.out.println( Duration.between( start, end ).toMillis() + " ms" );
```

Abgewandelt wird eine `Duration` wieder über `withXXX(…)` oder die `minusXXX(…)`/plusXXX(…)-Methoden. `Duration` `dividedBy(long divisor)` teilt die `Duration` durch eine Zeit. Die neue Java 9-Methode long `dividedBy(Duration divisor)` sagt, wie oft der divisor in der `Duration` liegt.

`toNanos()`, `toMillis()`, `toSeconds()` – neu in Java 9 –, `toMinutes()`, `toHours()`, `toDays()` konvertieren in ein long, `getNano()` und `getSeconds()` liefern die zwei Bestandteile einer `Duration` als long. Wichtig ist der Unterschied: Die Getter liefern den Feldwert von `Duration`, während `toXXX()` immer konvertiert.

Beispiel

```java
Duration aSecond = Duration.of( 1, ChronoUnit.MINUTES );
out.println( aSecond.getSeconds() ); // 60
out.println( aSecond.getNano() ); // 0
out.println( aSecond.toMinutes() ); // 1
out.println( aSecond.toSeconds() ); // 60
out.println( aSecond.toNanos() ); // 60000000000
```

In Java 9 kommen Methoden hinzu, die die Anteile an Minuten, Sekunden, usw. erfragen, und zwar long `toDaysPart()`, int `toHoursPart()`, int `toMinutesPart()`, int `toSecondsPart()`, int `toMillisPart()` und int `toNanosPart()`.

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/), [Java 9](https://tutego.de/blog/javainsel/category/java-9/)

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

---

## Navigation

- Previous: [UML-Diagramme mit Eclipse Papyrus](https://tutego.de/blog/javainsel/2017/02/uml-diagramme-mit-eclipse-papyrus.md)
- Next: [Datumsklasse java.time.LocalDate](https://tutego.de/blog/javainsel/2017/02/datumsklasse-java-time-localdate.md)
