1. Présentation de l'API Date/Heure

Les créateurs de Java n'aimaient pas la situation avec les classes Date et Calendar. Ils étaient bons à leur époque, mais les temps changent. Et quelque chose de simple, puissant et fiable est devenu nécessaire. Et avec la sortie de Java 8 (15 ans après Calendarsa parution), l' API Java Date Time a été introduite. Il s'agit d'un ensemble de classes qui devraient être capables de résoudre toutes les tâches possibles liées au temps.
Il y avait tellement de classes qu'elles étaient divisées en plusieurs packages :
Le java.timepackage est le package de base de l'API Java Date Time : il contient des classes telles que LocalDate, LocalTime, LocalDateTime, Instant, Periodet Duration. Tous les objets de ces classes sont immutable, ce qui signifie qu'ils ne peuvent pas être modifiés après la création.
Le java.time.formatpackage contient des classes pour le formatage de l'heure, c'est-à-dire la conversion des heures (et des dates) en chaînes et vice versa. Par exemple, il contient la DateTimeFormatterclasse polyvalente, qui remplace la SimpleDateFormatclasse.
Le java.time.zonepackage contient des classes pour travailler avec les fuseaux horaires. Il contient des classes telles que TimeZoneet ZonedDateTime. Si vous écrivez du code serveur pour des clients situés dans différentes parties du monde, vous aurez vraiment besoin de ces classes.
2. LocalDateclasse
La première et la plus utile des classes de l'API Date/Heure que nous allons examiner est la LocalDateclasse. Comme vous pouvez probablement le deviner d'après son nom, cette classe est conçue pour fonctionner avec des dates.
Les objets de cette classe ne changent pas après leur création, c'est-à-dire que la LocalDateclasse est immuable. Mais cette propriété ajoute simplicité et fiabilité à la classe. Surtout si plusieurs threads (threads d'exécution) interagissent avec un tel objet en même temps.
Pour créer un nouvel LocalDateobjet, vous devez utiliser l'une des méthodes statiques. Voici une liste des principaux.
Obtenir la date actuelle
Pour obtenir la date actuelle, vous devez utiliser la now()méthode statique. C'est beaucoup plus facile qu'il n'y paraît :
LocalDate today = LocalDate.now();
Où todayest une LocalDatevariable et LocalDate.now()est un appel à la now()méthode statique de la LocalDateclasse.
Exemple:
| Code | Sortie console |
|---|---|
|
|
Obtenir une date dans un fuseau horaire spécifique
La LocalDateclasse a également une variante de la now(ZoneId)méthode qui vous permet d'obtenir la date actuelle dans un fuseau horaire spécifique.
Pour ce faire, nous avons besoin d'une autre classe — la ZoneIdclasse (java.time.ZoneId). Il a une of()méthode qui renvoie un ZoneIdobjet donné le nom du fuseau horaire.
Pour déterminer la date actuelle à Shanghai, vous devez écrire le code suivant :
| Code | Sortie console |
|---|---|
|
|
Vous pouvez trouver une liste des noms de tous les fuseaux horaires sur Internet.
3. Obtenir une date précise
Pour obtenir un LocalDateobjet qui représente une date spécifique, vous devez utiliser la of()méthode statique. Tout ici est aussi très simple et clair :
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Où dateest une LocalDatevariable et est un appel à la méthode statique de la classe.LocalDate.of()of()LocalDate
Ici, nous voyons la FEBRUARYconstante de la Monthclasse (java.time.Month) utilisée pour spécifier février comme mois.
Vous pouvez également spécifier le mois à l'ancienne - en utilisant un nombre :
LocalDate date = LocalDate.of(2019, 2, 22);
Deux? Au lieu de février ? Cela signifie-t-il que les mois sont à nouveau numérotés à partir de un ?
Oui, près de 20 ans après la création de Java, les mois ont enfin cessé d'être comptés à partir de zéro.
Exemple:
| Code | Sortie console |
|---|---|
|
|
Obtenir une date par l'index du jour
Il existe une autre façon intéressante de créer une date : en utilisant la ofYearDayméthode, vous pouvez obtenir une date basée uniquement sur le numéro de l'année et l'indice du jour dans l'année. Voici l'aspect général :
LocalDate date = LocalDate.ofYearDay(year, day);
Où yearest le numéro de l'année et dayest l'index du jour de l'année.
Exemple:
| Code | Sortie console |
|---|---|
|
|
Le 100e jour de 2019 est le 10 avril.
Obtenir une date Unix
Vous souvenez-vous que Dateles objets ont toujours stocké le temps en nombre de millisecondes depuis le 1er janvier 1970 ? Pour s'assurer que les programmeurs ne rateraient pas le bon vieux temps, la LocalDateclasse s'est dotée d'une ofEpochDay()méthode qui renvoie la date calculée à partir du 1er janvier 1970. Voici l'apparence générale :
LocalDate date = LocalDate.ofEpochDay(day);
Où dayest le nombre de jours qui se sont écoulés depuis le 1er janvier 1970.
Exemple:
| Code | Sortie console |
|---|---|
|
|
4. Obtenir des éléments d'une date
Il est impossible de modifier LocalDateles objets, mais vous pouvez obtenir des éléments individuels de la date stockée. LocalDateles objets ont plusieurs méthodes pour cela :
| Méthode | Description |
|---|---|
|
Renvoie l'année d'une date spécifique |
|
Renvoie le mois de la date : une constante parmi plusieursJANUARY, FEBRUARY, ...; |
|
Renvoie l'index du mois de la date. Janvier == 1. |
|
Renvoie l'indice du jour du mois |
|
Renvoie l'index du jour depuis le début de l'année |
|
Renvoie le jour de la semaine : une constante parmi plusieursMONDAY, TUESDAY, ...; |
|
Renvoie l'ère : soit BCE(Avant l'ère actuelle) soit CE(Ere actuelle) |
Exemple:
| Code | Sortie console |
|---|---|
|
|
5. Changer la date dans un LocalDateobjet
La LocalDateclasse contient plusieurs méthodes qui vous permettent de travailler avec des dates. L'implémentation de ces méthodes est analogue aux méthodes de la Stringclasse : elles ne modifient pas l' LocalDateobjet existant, mais en renvoient un nouveau avec les données souhaitées.
Voici les méthodes de la LocalDateclasse :
| Méthode | Description |
|---|---|
|
Ajoute un nombre spécifié de jours à la date |
|
Ajoute des semaines à la date |
|
Ajoute des mois à la date |
|
Ajoute des années à la date |
|
Soustrait des jours de la date |
|
Soustrait des semaines de la date |
|
Soustrait des mois de la date |
|
Soustrait des années à la date |
Exemple:
| Code | Sortie console |
|---|---|
|
|
Les birthday objectméthodes dont nous appelons ne changent pas. Au lieu de cela, ses méthodes renvoient de nouveaux objets contenant les données souhaitées.
GO TO FULL VERSION