Comment obtenir le début et la fin d’une journée à l’aide de Java

Comment obtenir le début et la fin d'une journée avec Java

1. Vue d'ensemble

Dans ce court didacticiel,we’ll learn how to get the start and the end of a day in Java, en utilisant des exemples simples et directs pour différents scénarios.

Nous utiliserons lesJava’s 8 Date/Time API 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 commencerhere.

2. Depuis un objetLocalDate

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'objetLocalDate, tel que:

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

2.1. atStartOfDay()

Le moyen le plus simple d'obtenir unLocalDateTime représentant le début d'un jour particulier est d'utiliser la méthodeatStartOfDay():

LocalDateTime startOfDay = localDate.atStartOfDay();

Cette méthode est surchargée, donc dans le cas où nous voudrions en obtenir unZonedDateTime, nous pouvons le faire en spécifiant lesZoneId:

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

2.2. of()

Une autre façon d'obtenir le même résultat est d'utiliser la méthodeof(), en fournissant unLocalDate et l'un des champs statiques deLocalTime:

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

LocalTime offre les champs statiques suivants:MIDNIGHT (00:00),MIN (00:00),NOON (12:00) etMAX (23: 59: 59,999999999).

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

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

2.3. atTime()

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

Dans ce cas, de toute façon, nous utiliserons le champLocalTime´sMAX comme argument pour obtenir le dernier moment du jour donné:

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éthodeatDate() d'un objetLocalTime, en passant lesLocalDate comme argument:

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

3. Depuis un objetLocalDateTime

Il va presque sans dire que nous pouvons obtenir lesLocalDate à partir de celui-ci, puis utiliser l'une des méthodes de la section 2 pour en 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 objetLocalDateTime donné.

3.1. with()

All classes implementing the Temporal interface can use this method.

Dans ce cas, nous utiliserons la signature de la méthode qui prend unTemporalField (notamment, une des valeursChronoField Enum) et un sargumentlong comme nouvelle valeur du champ:

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

4. Depuis un objetZonedDateTime

Si on nous donne unZonedDateTime,, nous pouvons utiliser la méthodewith() car elle implémente également lesTemporal interface:

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 enour GitHub repository.