So erhalten Sie den Start und das Ende eines Tages mit Java

So starten und beenden Sie einen Tag mit Java

1. Überblick

In diesem kurzen Tutorial wirdwe’ll learn how to get the start and the end of a day in Java anhand einfacher, unkomplizierter Beispiele für verschiedene Szenarien verwendet.

Wir werden dieJava’s 8 Date/Time API verwenden, um diese Beispiele zu erstellen.

Wenn Sie vor dem Fortfahren etwas mehr über die 8-Datums- und Uhrzeitbibliothek von Java lesen möchten, können Sie mithere beginnen.

2. Aus einemLocalDate Objekt

Lassen Sie uns zunächst sehen, wie wir den Beginn oder das Ende eines Tages alsLocalDate-Objekt erhalten können, z. B.:

LocalDate localDate = LocalDate.parse("2018-06-23");

2.1. atStartOfDay()

Der einfachste Weg, einLocalDateTime zu erhalten, das den Beginn eines bestimmten Tages darstellt, ist die Verwendung deratStartOfDay()-Methode:

LocalDateTime startOfDay = localDate.atStartOfDay();

Diese Methode ist überladen. Wenn wir also einZonedDateTime daraus erhalten möchten, können wir dies tun, indem wirZoneId angeben:

ZonedDateTime startOfDay = localDate.atStartOfDay(ZoneId.of("Europe/Paris"));

2.2. of()

Eine andere Möglichkeit, dasselbe Ergebnis zu erzielen, ist die Verwendung derof()-Methode, bei der einLocalDate und eines der statischen Felder vonLocalTime angegeben werden:

LocalDateTime startOfDay = LocalDateTime.of(localDate, LocalTime.MIDNIGHT);

LocalTime bietet die folgenden statischen Felder:MIDNIGHT (00:00),MIN (00:00),NOON (12:00) undMAX (23: 59: 59,999999999).

Wenn wir also das Ende des Tages erreichen möchten, verwenden wir den Wert vonMAX.

Probieren wir es aus, aber mit einer anderen Methode.

2.3. atTime()

Diese Methode ist überladen, sodass wir die gewünschte Zeit in Stunden, Minuten, Sekunden oder sogar Nanosekunden angeben können.

In diesem Fall verwenden wir ohnehin dasMAX-FeldMAXals Argument, um den letzten Moment des angegebenen Tages zu erhalten:

LocalDateTime startOfDay = localDate.atTime(LocalTime.MAX);

2.4. atDate()

Dieses Beispiel ist den vorherigen ziemlich ähnlich, aber dieses Mal verwenden wir dieatDate()-Methode einesLocalTime-Objekts und übergeben dieLocalDate als Argument:

LocalDateTime endOfDate = LocalTime.MAX.atDate(localDate);

3. Aus einemLocalDateTime Objekt

Es ist fast selbstverständlich, dass wir dieLocalDate daraus abrufen und dann eine der Methoden von Abschnitt 2 verwenden können, um das Ende oder den Beginn des Tages daraus zu ermitteln:

LocalDateTime localDateTime = LocalDateTime
  .parse("2018-06-23T05:55:55");
LocalDateTime endOfDate = localDateTime
  .toLocalDate().atTime(LocalTime.MAX);

In diesem Abschnitt analysieren wir jedoch eine andere Methode, um das Objekt zu erhalten, dessen Zeitabschnitt auf den Beginn oder das Ende des Tages eingestellt ist, direkt von einem anderen gegebenenLocalDateTime-Objekt.

3.1. with()

All classes implementing the Temporal interface can use this method.

In diesem Fall verwenden wir die Signatur der Methode, die einenTemporalField (insbesondere einen derChronoField Enum-Werte) und einlong -Sargument als neuen Wert des Felds verwendet:

LocalDateTime endOfDate = localDateTime.with(ChronoField.NANO_OF_DAY, LocalTime.MAX.toNanoOfDay());

4. Aus einemZonedDateTime Objekt

Wenn wir einZonedDateTime, erhalten, können wir diewith()-Methode verwenden, da sie auch dasTemporal interface implementiert:

ZonedDateTime startofDay = zonedDateTime.with(ChronoField.HOUR_OF_DAY, 0);

5. Fazit

Zusammenfassend haben wir viele verschiedene Möglichkeiten analysiert, um den Beginn und das Ende eines Tages in Java für viele verschiedene Fallszenarien zu ermitteln.

Schließlich haben wir die Erkenntnisse der 8 Java-Klassen für Datum und Uhrzeit kennengelernt und uns mit vielen ihrer Klassen und Schnittstellen vertraut gemacht.

Wie immer kann auf alle Beispiele inour GitHub repository zugegriffen werden.