Comment démarrer et terminer une journée avec Java

1. Vue d'ensemble

Dans ce court didacticiel, nous allons apprendre comment démarrer et terminer une journée en Java , en utilisant des exemples simples et directs pour différents scénarios.

Nous utiliserons l'API Java 8 Date / Time pour créer ces exemples.

Si vous souhaitez en savoir un peu plus sur la bibliothèque de date et d'heure 8 de Java avant de continuer, vous pouvez commencer ici.

2. À partir d'un objet LocalDate

Tout d'abord, voyons comment nous pouvons obtenir le début ou la fin d'une journée qui nous est donnée en tant qu'objet LocalDate , tel que:

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

2.1. atStartOfDay ()

Le moyen le plus simple d'obtenir un LocalDateTime représentant le début d'un jour particulier consiste à utiliser la méthode atStartOfDay () :

LocalDateTime startOfDay = localDate.atStartOfDay();

Cette méthode est surchargée, donc au cas où nous voudrions en obtenir un ZonedDateTime , nous pouvons le faire en spécifiant le ZoneId :

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

2.2. de()

Une autre façon d'obtenir le même résultat est d'utiliser la méthode of () , en fournissant un LocalDate et l'un des champs statiques de LocalTime :

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

LocalTime propose les champs statiques suivants: MIDNIGHT (00:00), MIN (00:00), NOON (12:00) et MAX (23: 59: 59.999999999).

Par conséquent, si nous voulons obtenir la fin de la journée, nous utiliserons la valeur MAX .

Essayons-le, mais avec une méthode différente.

2.3. au moment()

Cette méthode est surchargée, ce qui nous permet de spécifier l'heure souhaitée en heures, minutes, secondes ou même nanosecondes.

Dans ce cas, de toute façon, nous allons utiliser le LocalTime de MAX champ comme argument pour obtenir le dernier moment de la journée donnée:

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

2.4. atDate ()

Cet exemple est assez similaire aux précédents, mais cette fois, nous utiliserons la méthode atDate () d'un objet LocalTime , en passant le LocalDate comme argument:

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

3. À partir d'un objet LocalDateTime

Il va presque sans dire que nous pouvons obtenir le LocalDate à partir de celui-ci, puis utiliser l'une des méthodes de la section 2 pour obtenir la fin ou le début de la journée:

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

Mais dans cette section, nous analyserons une autre méthode pour obtenir l'objet avec sa section de temps définie au début ou à la fin de la journée, directement à partir d'un autre objet LocalDateTime donné .

3.1. avec()

Toutes les classes implémentant l' interface Temporal peuvent utiliser cette méthode .

Dans ce cas, nous utiliserons la signature de la méthode qui prend un TemporalField (notamment, l'une des valeurs ChronoField Enum ) et un long argument comme nouvelle valeur du champ:

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

4. À partir d'un objet ZonedDateTime

Si on nous donne un ZonedDateTime, nous pouvons utiliser la méthode with () car elle implémente également l' interface Temporal :

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

5. Conclusion

Pour résumer, nous avons analysé de nombreuses façons différentes de commencer et de terminer une journée en Java pour de nombreux scénarios de cas différents.

Enfin, nous avons découvert les connaissances des 8 classes de bibliothèque de date et d'heure de Java et nous nous sommes familiarisés avec nombre de ses classes et interfaces.

Comme toujours, tous les exemples sont accessibles dans notre référentiel GitHub.