Unterschied zwischen java.time.Period und java.time.Duration

Neben Lambda-Ausdrücken, virtuellen Methoden, Streams und vielen anderen netten Funktionen hat Java 8 auch ein neues Update erhalten Datums- und Uhrzeit-API die unter der gepflegt wird JSR-310.

In meinen vorherigen Artikeln habe ich etwas über LocalDate und LocalTime erklärt. Diese neue API hat sehr nützliche Perioden- und Dauerklassen hinzugefügt, um Programmierern die Arbeit bei Zeitberechnungen zu erleichtern. Dieses Beispiel zeigt die Verwendung java.time.Period Und java.time.Duration und was ist der Hauptunterschied zwischen diesen beiden Klassen?

Wenn Sie Fragen haben, schreiben Sie diese bitte in den Kommentarbereich oder posten Sie sie auf unserer Facebook-Seite. Weitere Artikel zu Java 8 können Sie hier lesen.

Unterschied zwischen Zeitraum und Dauer

Mit Java 8 haben wir zwei neue Klassen Period und Duration zum Messen von Datum/Uhrzeit in einer Skala. Der Zeitraum ist eine datumsbasierte Zeitspanne. Diese Klasse gibt die Zeitspanne in Jahren, Monaten und Tagen an. Wobei „Dauer“ eine zeitbasierte Zeitspanne ist. Diese Klasse gibt die Zeitspanne in Stunden, Minuten und Sekunden an. Die Dauer speichert praktisch die Zeit, ähnlich wie die Klasse java.time.Instant, die in Nanosekunden speichert.

Um es auf den Punkt zu bringen: Der tatsächliche Unterschied zwischen Periode und Dauer liegt darin, wie sie den Zeitunterschied berechnen. Die Dauer ist am besten geeignet, wenn wir maschinenbasierte Zeitvorgaben messen, wohingegen die Periode am besten geeignet ist, wenn wir die für Menschen lesbare Zeitdarstellung wissen möchten. Wenn Sie beispielsweise das Alter anhand des aktuellen Datums und des Geburtsdatums ermitteln möchten, ist „Periode“ sinnvoller. Wenn Sie sich das folgende Beispiel ansehen, ist der Unterschied leicht zu verstehen.

Beispiel

package javabeat.net;

import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;

/**
 * Difference Between Period and Duration
 * @author www.javabeat.net
 *
 */
public class PeriodDurationDifferenceExample {

	public static void main(String[] args) {
		//Calculate Birth Day using Period class
		LocalDate localDate = LocalDate.now();
		LocalDate bDay = LocalDate.of(1980, Month.OCTOBER, 12);
		Period age = Period.between(localDate, bDay);
		System.out.println("Current Age : "+age);

		//Calculate time different using Duration class
		Instant instant1 = Instant.now();
		Instant instant2 = instant1.plusSeconds(3600);
		Duration duration = Duration.between(instant1, instant2);
		System.out.println("Time Duration : "+duration);
	}

}

Die Ausgabe für das obige Programm lautet:

Current Age : P-34Y-6M
Time Duration : PT1H

Ein wichtiger Punkt ist, dass beim Versuch, das LocalDate zur Berechnung der Dauer zu verwenden, die folgende Ausnahme auftritt. Sie müssen die Instant-Klasse für die Berechnung der Dauer verwenden.

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Seconds
	at java.time.LocalDate.until(LocalDate.java:1608)
	at java.time.Duration.between(Duration.java:475)
	at javabeat.net.PeriodDurationDifferenceExample.main(PeriodDurationDifferenceExample.java:16)

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen