Java dispose enfin d'un moyen intuitif et fiable de travailler avec les dates et les heures. Les principes de date et d’heure sont fondamentaux dans de nombreuses applications. Divers éléments tels que les dates de naissance, les dates de location, les heures d'événements et les heures d'ouverture des magasins sont tous basés sur des dates et des heures, mais Java SE ne fournissait pas un moyen pratique de travailler avec eux. À partir de Java SE 8 , il existait un ensemble de packages java.time , qui fournissent une API bien structurée pour travailler avec les dates et les heures.
Voici une petite liste des problèmes existants dans sa mise en œuvre :
Arrière-plan
Lorsque Java est sorti pour la première fois, dans la version 1.0 , la seule classe permettant de travailler avec les dates et les heures était java.util.Date . La première chose que les développeurs ont remarquée, c'est qu'il ne s'agit pas d'une « date ». En fait, il représente un instant précis, à la milliseconde près, mesuré à partir de la date du 1er janvier 1970. Cependant, étant donné que la méthode toString() de Date affiche la date et l'heure dans le fuseau horaire spécifié dans les paramètres Java de la machine , certains développeurs ont conclu à tort que Date pouvait fonctionner avec des fuseaux horaires. Corriger cette classe s'est avéré si difficile (ou si paresseux) que dans la version 1.1 , nous avons dû ajouter une nouvelle classe - java.util.Calendar . Malheureusement, la classe Calendar s'est avérée guère meilleure que Date .- Changeable. Les classes telles que la date et l’heure doivent être immuables.
- Compensations. Les années dans Date commencent à 1900, les mois dans les deux classes commencent à zéro.
- Des noms. La date n'est pas réellement une "date" et le calendrier n'est pas un calendrier.
- Mise en page. Le formatage ne fonctionne qu'avec la date, pas avec le calendrier, et n'est pas thread-safe.
Revoir
La nouvelle API java.time contient 5 packages :- java.time - le package de base contenant des objets pour stocker les valeurs
- java.time.chrono - donne accès à différents calendriers
- java.time.format - formatage et reconnaissance de la date et de l'heure
- java.time.temporal - bibliothèques de bas niveau et fonctionnalités avancées
- java.time.zone - cours pour travailler avec les fuseaux horaires
Rendez-vous
La classe LocalDate est l'une des plus importantes de la nouvelle API . Il contient une valeur immuable qui représente une date. Vous ne pouvez pas régler l'heure ou le fuseau horaire. Le nom « local » vous est peut-être familier depuis Joda-Time et provient à l'origine de la norme ISO-8601 . Cela signifie précisément l’absence de fuseau horaire. Essentiellement, LocalDate est une description d'une date, telle que « 5 avril 2014 ». L'heure réelle de cette date différera en fonction de votre fuseau horaire. Par exemple, en Australie, cette date sera 10 heures plus tôt qu'à Londres et 18 heures plus tôt qu'à San Francisco. La classe LocalDate possède toutes les méthodes couramment nécessaires :LocalDate date = LocalDate.of(2014, Month.JUNE, 10); int year = date.getYear(); // 2014 Month month = date.getMonth(); // Июнь int dom = date.getDayOfMonth(); // 10 DayOfWeek dow = date.getDayOfWeek(); // Вторник int len = date.lengthOfMonth(); // 30 (дней в Июне) boolean leap = date.isLeapYear(); // false (не високосный год)
Dans notre exemple, nous voyons une date créée à l'aide d'une méthode d'usine (tous les constructeurs sont privés). Ensuite, nous demandons à l'objet certaines données. Veuillez noter que
les énumérations Month et
DayOfWeek sont conçues pour rendre le code plus lisible et plus fiable. Dans l'exemple suivant nous verrons comment modifier la date. Puisque la classe est immuable, le résultat sera de nouveaux objets, mais l'original restera tel qu'il était.
LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.withYear(2015); // 2015-06-10 date = date.plusMonths(2); // 2015-08-10 date = date.minusDays(1); // 2015-08-09
Ce sont des changements relativement simples, mais vous devez souvent effectuer des modifications de date plus complexes. Il existe un mécanisme spécial pour cela dans
l'API java.time - TemporalAdjuster . Son but est de fournir un outil intégré qui permet de manipuler les dates, par exemple en obtenant un objet correspondant au dernier jour du mois. Certains d'entre eux sont inclus dans
l'API , mais vous pouvez ajouter les vôtres. L'utilisation de modificateurs est très simple, mais cela nécessite des importations statiques :
import static java.time.DayOfWeek.* import static java.time.temporal.TemporalAdjusters.* LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.with(lastDayOfMonth()); date = date.with(nextOrSame(WEDNESDAY));
l'utilisation de modificateurs simplifie grandement votre code. Personne ne veut voir beaucoup de manipulations manuelles de la date. Si une sorte de manipulation de date se produit plusieurs fois dans votre projet, écrivez votre propre modificateur et votre équipe pourra l'utiliser comme composant déjà écrit et testé.
GO TO FULL VERSION