LU08b - Java und die Zeit

Das speichern von Zeit und Datumswerten ist in vielen Applikationen notwendig. Java bietet uns mit den Datentypen LocalDate, LocalTime, LocalDateTime, Period und Duration aus der Bibliothek java.time einen eifach zu benutzenden Datentyp dafür.

Einfache Datumswerte - LocalDate

Einfache Datumswerte beinhalten lediglich das Datum, ohne Zeitangabe.

LocalDate erstellen

Es gibt verschiedene Möglichkeiten ein LocalDate zu erstellen, das den 8. Januar 2020 darstellt:

Wir erstellen das LocalDate über den Aufruf der of() Methode.

LocalDate date = LocalDate.of(2020, 1, 8);

Der Monat kann auch mit dem Enum Month angegeben werden:

LocalDate date = LocalDate.of(2020, Month.JANUARY, 8)

Eine weitere Möglichkeit besteht darin, ein Datum durch Parsen einer Zeichenkette (String) zu erzeugen. Wir können die parse-Methode mit nur einem einzigen Argument verwenden, um ein Datum im Format yyyy-mm-dd zu analysieren:

LocalDate date = LocalDate.parse("2020-01-08");

Wir können auch ein anderes Datumsformat angeben, dies mit Hilfe der DateTimeFormatter-Klasse als zweiten Parameter der Parse-Methode:

LocalDate date = LocalDate.parse("8-Jan-2020", DateTimeFormatter.ofPattern("d-MMM-yyyy"));

LocalDate funktionen

Hier sind einige Funktionen aufgelistet, die LocalDate bietet:

Wir können vom LocalDate den heutige Tag erhalten:

LocalDate date = LocalDate.now();

Wir können Tage/Wochen/Monate/Jahre hinzurechnen oder entfernen:

LocalDate tomorrow = LocalDate.now().plusDays(1);
LocalDate yesterday= LocalDate.now().minusDays(1);

Es gibt auch passend dazu die Funktionen plus/minusWeeks, plus/minusMonths und plus/minusYears

Wir können Datumswerte vergleichen:

boolean notBefore = LocalDate.parse("2042-06-12").isBefore(LocalDate.parse("2042-06-11"));
boolean isAfter = LocalDate.parse("2042-06-12").isAfter(LocalDate.parse("2042-06-11"));

Wir können feststellen ob es ein Schaltjahr ist:

boolean leapYear = LocalDate.now().isLeapYear();

Wir können die Zeit zwischen den Daten berechnen:

LocalDate tomorrow = LocalDate.now().plusDays(1);
LocalDate yesterday= LocalDate.now().minusDays(1);
 
Period timeBetween = Period.between(yesterday, tomorrow); // Wir erhalten den Datentyp Period. Mehr dazu im Kapitel zu Period

Wir können einzelne Tage/Monate/Jahre abfragen.

LocalDate today = LocalDate.now();
int day = today.getDayOfMonth();
int month = today.getMonthValue();
int year = today.getYear();

Es gibt noch viele weitere Funktionen die zur Verfügung stehen, eine Liste mit Beschreibung finden Sie im Java-API

Einfache Zeitwerte - LocalTime

Einfache Zeitwerte beinhalten lediglich die Zeit, ohne Datumsangabe.

LocalTime erstellen

Es gibt verschiedene Möglichkeiten eine LocalTime zu erstellen, die den 7:30 Uhr darstellt:

Wir erstellen die LocalTime über den Aufruf der of() Methode.

LocalTime time = LocalTime.of(7, 30);

Eine weitere Möglichkeit besteht darin, eine Zeit durch Parsen einer Zeichenkette (String) zu erzeugen. Wir können die parse-Methode mit nur einem einzigen Argument verwenden, um ein Datum im Format hh-mm zu analysieren:

LocalTime time = LocalTime.parse("07:30");

LocalTime funktionen

Hier sind einige Funktionen aufgelistet, die LocalTime bietet:

Wir können eine LocalTime von der aktuellen Zeit erhalten:

LocalTime now = LocalTime.now();

Wir können Sekunden/Minuten/Stunden hinzurechnen oder entfernen:

LocalTime in5Minutes = LocalTime.now().plusMinutes(5);
LocalTime before5Minutes = LocalTime.now().minusMinutes(5);

Es gibt auch passend dazu die Funktionen plus/minusSeconds und plus/minusHours

Wir können Zeitwerte vergleichen:

boolean notBefore = LocalTime.parse("7:30").isBefore(LocalTime.parse("6:30"));
// oder auch
LocalTime time = LocalTime.parse("2:45");
boolean isAfter = LocalTime.parse("7:30").isAfter(time);
// oder auch
LocalTime time0 = LocalTime.parse("2:45");
LocalTime time1 = LocalTime.parse("7:30");
boolean isAfter = time1.isAfter(time);

Wir können die Zeit zwischen zwei Uhrzeiten berechnen:

LocalTime time0 = LocalTime.parse("2:45");
LocalTime time1 = LocalTime.parse("7:30");
 
Duration duration = Duration.between(time0, time1);  // Wir erhalten den Datentyp Duration. Mehr dazu im Kapitel zu Duration.

Wir können einzelne Stunden/Minuten/Sekunden abfragen.

LocalTime now = LocalTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();

Es gibt noch viele weitere Funktionen die zur Verfügung stehen, eine Liste mit Beschreibung finden Sie im Java-API

Einfache Zeitdatumswerte - LocalDateTime

LocalDateTime wird verwendet, um eine Kombination aus Datum und Uhrzeit darzustellen. Dies ist die am häufigsten verwendete Klasse, wenn wir eine Kombination aus Datum und Uhrzeit benötigen.

LocalDateTime erstellen

Es gibt verschiedene Möglichkeiten ein LocalDateTime zu erstellen, das den 8. Januar 2020 13:30 darstellt:

Wir erstellen das LocalDateTime über den Aufruf der of() Methode.

LocalDateTime date = LocalDateTime.of(2020, 1, 8, 13, 30);

Der Monat kann auch mit dem Enum Month angegeben werden:

LocalDate date = LocalDate.of(2020, Month.JANUARY, 8, 13, 30)

Eine weitere Möglichkeit besteht darin, ein Datum durch Parsen einer Zeichenkette (String) zu erzeugen. Wir können die parse-Methode mit nur einem einzigen Argument verwenden, um ein Datum im Format yyyy-mm-ddThh:mm zu analysieren:

LocalDateTime dateTime= LocalDateTime.parse("2020-01-08T13:30");

Wir können auch ein anderes Datumszeitformat angeben, dies mit Hilfe der DateTimeFormatter-Klasse als zweiten Parameter der Parse-Methode:

LocalDateTime dateTime = LocalDateTime.parse("08.01.2020 13:30", DateTimeFormatter.ofPattern("d.M.yyyy HH:mm"));

LocalDateTime funktionen

Hier sind einige Funktionen aufgelistet, die LocalDateTime bietet:

Wir können vom LocalDateTime den heutige Tag mit der Uhrzeit erhalten:

LocalDateTime date = LocalDateTime.now();

Wir können Tage/Wochen/Monate/Jahre hinzurechnen oder entfernen:

LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
LocalDateTime yesterday = LocalDateTime.now().minusDays(1);

Es gibt auch passend dazu die Funktionen plus/minusSeconds, plus/minusMinutes, plus/minusHours, plus/minusWeeks, plus/minusMonths und plus/minusYears

Wir können Datumswerte vergleichen:

boolean notBefore = LocalDateTime.parse("2042-06-12T13:30").isBefore(LocalDateTime.parse("2042-06-11T04:30"));
boolean isAfter = LocalDateTime.parse("2042-06-12T13:30").isAfter(LocalDateTime.parse("2042-06-11T04:30"));

Wir können die Zeit zwischen den Daten berechnen:

LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
LocalDateTime yesterday = LocalDateTime.now().minusDays(1);
 
Duration timeBetween = Duration.between(yesterday, tomorrow); // Wir erhalten den Datentyp Duration. Mehr dazu im Kapitel zu Duration

Wir können einzelne Tage/Monate/Jahre abfragen.

LocalDateTime today = LocalDateTime.now();
int day = today.getDayOfMonth();
int month = today.getMonthValue();
int year = today.getYear();
int hour = today.getHour();
int minute = today.getMinute();

Es gibt noch viele weitere Funktionen die zur Verfügung stehen, eine Liste mit Beschreibung finden Sie im Java-API

Period

Die Klasse Period verwendet die Einheiten Jahr, Monat und Tag zur Darstellung eines Zeitraums.

Wir können ein Period-Objekt als Differenz zwischen zwei Daten erhalten, indem wir die Methode between() verwenden:

LocalDate startDate = LocalDate.of(2015, 2, 20);
LocalDate endDate = LocalDate.of(2017, 1, 15);
 
Period period = Period.between(startDate, endDate);

Anschließend können wir die Datumseinheiten des Zeitraums mit den Methoden getYears(), getMonths(), getDays() ermitteln:

System.out.println("Years:" + period.getYears() + 
  " Months:" + Zeitraum.getMonths() + 
  " Days: "+Zeitraum.getTage());

Die Methode isNegative(), die true zurückgibt wenn eine der Einheiten negativ ist, kann verwendet werden, um festzustellen, ob das Enddatum höher ist als das Startdatum:

System.out.println(period.isNegative())

Wenn isNegative() den Wert false zurückgibt, dann liegt das Startdatum vor dem Enddatum.

Eine andere Möglichkeit, ein Period-Objekt zu erstellen, basiert auf der Anzahl der Tage, Monate, Wochen oder Jahre unter Verwendung spezieller Methoden:

Period fromUnits = Period.of(3, 10, 10);
Period fromDays = Period.ofDays(50);
Period fromMonths = Period.ofMonths(5);
Period fromYears = Period.ofYears(10);
Period fromWeeks = Period.ofWeeks(40);

Es gibt noch viele weitere Funktionen die zur Verfügung stehen, eine Liste mit Beschreibung finden Sie im Java-API

Duration

Die Klasse Duration stellt ein Zeitintervall in Sekunden oder Nanosekunden dar und eignet sich am besten für die Handhabung kürzerer Zeitspannen in Fällen, die mehr Präzision erfordern.

Wir können die Differenz zwischen zwei Zeitpunkten als Duration-Objekt mit der Methode between() bestimmen:

LocalTime start = LocalTime.of(1, 20, 25, 1024); //(Stunde, Minute, Sekunde, Nanosekunden)
LocalTime end = LocalTime.of(3, 22, 27, 1544);
 
Duration.between(start, end).getSeconds();

Dann können wir die Methoden getSeconds() oder getNanoseconds() verwenden, um den Wert der Zeiteinheiten zu bestimmen:

System.out.println(duration.getSeconds());

Die Methode isNegative() kann verwendet werden, um zu überprüfen, ob der Endzeitpunkt größer ist als der Startzeitpunkt:

boolean isNegative = duration.isNegative();

Wir können auch ein Duration-Objekt auf der Grundlage mehrerer Zeiteinheiten erhalten, indem wir die Methoden ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos() oder ofSeconds() verwenden:

Duration fromDays = Duration.ofDays(1);
Duration fromMinutes = Duration.ofMinutes(60);

Eine Dauer kann mit toDays(), toHours(), toMillis() und toMinutes() in andere Zeiteinheiten umgewandelt werden:

long stunden = fromMinutes.toHours();

Ein Dauerwert kann durch Methoden der Form plusX() oder minusX() erhöht oder verringert werden, wobei X für Tage, Stunden, Millis, Minuten, Nanos oder Sekunden stehen kann:

Duration fromSeconds = Duration.ofSeconds(60);
fromSeconds.plusSeconds(60); // neu 120 Sekunden     
fromSeconds.minusSeconds(30); // neu 90 Sekunden

Es gibt noch viele weitere Funktionen die zur Verfügung stehen, eine Liste mit Beschreibung finden Sie im Java-API


© Kevin Maurizi