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

1. Übersicht

In diesem kurzen Tutorial lernen wir anhand einfacher, unkomplizierter Beispiele für verschiedene Szenarien , wie Sie den Anfang und das Ende eines Tages in Java erreichen .

Wir werden die 8 Date / Time API von Java verwenden, um diese Beispiele zu erstellen.

Wenn Sie etwas mehr über die 8-Datums- und Uhrzeitbibliothek von Java lesen möchten, bevor Sie fortfahren, können Sie hier beginnen.

2. Aus einem LocalDate- Objekt

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

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

2.1. atStartOfDay ()

Der einfachste Weg, eine LocalDateTime zu erhalten, die den Beginn eines bestimmten Tages darstellt, ist die Verwendung der atStartOfDay () -Methode:

LocalDateTime startOfDay = localDate.atStartOfDay();

Diese Methode ist überladen. Wenn wir also eine ZonedDateTime daraus erhalten möchten , können wir dies tun, indem wir die ZoneId angeben :

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

2.2. von()

Eine andere Möglichkeit, dasselbe Ergebnis zu erzielen, ist die Verwendung der of () -Methode, bei der ein LocalDate und eines der statischen Felder von LocalTime bereitgestellt werden:

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

LocalTime bietet die folgenden statischen Felder: MIDNIGHT (00:00), MIN (00:00), NOON (12:00) und MAX (23: 59: 59.999999999).

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

Probieren wir es aus, aber mit einer anderen Methode.

2.3. zum Zeitpunkt()

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

In diesem Fall verwenden wir jedenfalls das MAX- Feld von LocalTime als Argument, um den letzten Moment des angegebenen Tages abzurufen :

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

2.4. atDate ()

Dieses Beispiel ist den vorherigen ziemlich ähnlich, aber dieses Mal verwenden wir die atDate () -Methode eines LocalTime- Objekts und übergeben das LocalDate als Argument:

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

3. Aus einem LocalDateTime- Objekt

Es ist fast selbstverständlich, dass wir das LocalDate 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 gegebenen LocalDateTime- Objekt.

3.1. mit()

Alle Klassen, die die temporäre Schnittstelle implementieren , können diese Methode verwenden .

In diesem Fall verwenden wir die Signatur der Methode, die ein TemporalField (insbesondere einen der ChronoField Enum- Werte) und ein langes Argument als neuen Wert des Felds verwendet:

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

4. Aus einem ZonedDateTime- Objekt

Wenn wir eine ZonedDateTime erhalten, können wir die with () -Methode verwenden, da sie auch die temporäre Schnittstelle implementiert :

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

5. Schlussfolgerung

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 können Sie auf alle Beispiele in unserem GitHub-Repository zugreifen.