36. Travailler avec les dates et l'API java.time
La manipulation des dates et des heures est un besoin courant dans de nombreuses applications Java. Depuis la sortie de Java 8, l'API java.time
est devenue le choix standard pour travailler avec les dates et les heures de manière plus simple et moins sujette aux erreurs. Cette API a été inspirée par la bibliothèque Joda-Time et est connue pour sa conception immuable et fluide. Explorons les principaux aspects de cette API et comment vous pouvez l'utiliser pour effectuer des opérations de date complexes.
Présentation de l'API java.time
L'API java.time
comprend une série de classes conçues pour traiter des concepts temporels tels que les instants, les durées, les dates, les heures, les fuseaux horaires et les périodes. Les classes sont immuables et thread-safe, ce qui signifie que vous pouvez les utiliser sans soucis dans des environnements multithread.
Cours fondamentaux
- LocalDate : représente une date sans heure ni fuseau horaire (par exemple, 2023-03-15).
- LocalTime : représente une heure sans date ni fuseau horaire (par exemple, 10:15:30).
- LocalDateTime : combine
LocalDate
etLocalTime
, représentant une date et une heure sans fuseau horaire. - ZonedDateTime : représente une date et une heure avec le fuseau horaire.
- Instantané : représente un moment spécifique, généralement utilisé pour marquer des événements dans les applications.
- Durée : représente une durée en termes de secondes et de nanosecondes.
- Période : représente une durée en termes d'années, de mois et de jours.
Manipulation des dates
La manipulation des dates est facilitée par les classes LocalDate
, LocalTime
et LocalDateTime
. Vous pouvez créer des instances de ces classes à l'aide de leurs méthodes de fabrique statiques, telles que now()
, of()
et parse()
. Une fois que vous avez une instance, vous pouvez modifier ses propriétés en utilisant des méthodes comme plusDays()
, minusWeeks()
, withYear()
, etc. .
LocalDate date = LocalDate.now();
LocalDate demain = date.plusDays(1);
LocalDate lastMonthSameDay = date.minusMonths(1);
LocalDate in2025 = date.withYear(2025);
Formatage et analyse des dates
Le formatage et l'analyse des dates sont principalement effectués par la classe DateTimeFormatter
. Vous pouvez utiliser des formateurs prédéfinis ou créer les vôtres pour représenter les dates et les heures selon vos besoins.
Formatter DateTimeFormatter = DateTimeFormatter.ofPattern("jj/MM/aaaa");
Chaîne formattedDate = date.format(formatter); // "15/03/2023"
LocalDate dateFromString = LocalDate.parse("15/03/2023", formateur);
Travailler avec les fuseaux horaires
La classe ZonedDateTime
est utilisée pour gérer les dates et heures dans différents fuseaux horaires. Vous pouvez convertir un LocalDateTime
en un ZonedDateTime
en appliquant un fuseau horaire spécifique à l'aide de la méthode atZone()
. Il est également possible d'ajuster un ZonedDateTime
sur un autre fuseau horaire avec la méthode withZoneSameInstant()
.
ZoneId newYorkZoneId = ZoneId.of("Amérique/New_York");
ZonedDateTime zonedDateTime = LocalDateTime.now().atZone(newYorkZoneId);
ZonedDateTime zonedDateTimeInTokyo = zonedDateTime.withZoneSameInstant(ZoneId.of("Asie/Tokyo"));
Comparer les dates et les heures
Comparer des dates et des heures est une opération courante, et l'API java.time
propose des méthodes telles que isBefore()
, isAfter()
et isEqual()
pour faciliter ces comparaisons.
boolean isAfter = demain.isAfter(date);
booléen isBefore = lastMonthSameDay.isBefore(date);
booléen isEqual = in2025.isEqual(date.withYear(2025));
Intervalles de temps
Les classes Duration
et Period
vous permettent de représenter et de manipuler des intervalles de temps. Durée
est utilisé pour des durées en heures, minutes, secondes et nanosecondes, tandis que Période
est utilisé pour les jours, mois et années.
Durée durée = Duration.between(LocalTime.NOON, LocalTime.MIDNIGHT);
Période = Period.between(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.DECEMBER, 31));
API d'ajustement temporel
L'API java.time
inclut également des ajusteurs temporels qui vous permettent d'effectuer des opérations complexes de manière concise. Par exemple, vous pouvez rechercher le premier jour du mois suivant, le jour ouvrable suivant ou le dernier jour de l'année à l'aide d'ajusteurs temporels.
LocalDate firstDayOfNextMonth = date.with(TemporalAdjusters.firstDayOfNextMonth());
LocalDate nextWednesday = date.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
LocalDate lastDayOfYear = date.with(TemporalAdjusters.lastDayOfYear());
Conclusion
L'API java.time
est un outil puissant et flexible pour travailler avec les dates et les heures en Java. Avec sa conception immuable et thread-safe, il offre un moyen fiable et efficace de gérer des concepts temporels complexes dans vos applications. En maîtrisant cette API, vous serez en mesure de relever facilement n'importe quel défi lié à la date et à l'heure.