1. ZonedDateTime
classe
Il existe une autre classe très intéressante dans l'API Date Time : la ZonedDateTime
classe. Son objectif principal est de faciliter le travail avec des dates dans différents fuseaux horaires.
LocalDate
est idéal pour représenter les dates. Par exemple, les anniversaires. Mon anniversaire est le 15 mars, peu importe où je suis. Ceci est un exemple de date.
LocalTime
est formidable pour décrire l'heure, comme l'heure d'un réveil : je règle l'alarme sur 5 heures du matin et peu importe où je me trouve. 5h00 est 5h00. Ceci est un exemple de travail avec le temps.
Supposons maintenant que nous écrivions une application qui réserve des vols. Les avions décollent et arrivent en fonction de l'heure locale. L'avion est en vol pendant une durée fixe, mais les fuseaux horaires peuvent changer.
Fuseaux horaires
Soit dit en passant, les fuseaux horaires sont un vrai gâchis. Et si vous pensez qu'il y a 24 fuseaux horaires, vous vous trompez lourdement.
Par exemple, l'heure en Inde diffère de l'heure de Greenwich de cinq heures et demie : GMT+5:30
. Certains pays passent à l'heure d'été, d'autres non. De plus, différents pays passent à l'heure d'été à différents moments de l'année.
Et certains pays adoptent des lois qui annulent l'heure d'été, ou la réintroduisent, ou l'annulent à nouveau.
Quoi qu'il en soit, le monde a des fuseaux horaires, et dans chaque fuseau horaire il y a une heure. L'heure dans différentes zones peut coïncider pendant certaines périodes de l'année, puis différer pendant d'autres périodes. Les fuseaux horaires sont généralement nommés d'après les principales villes qui s'y trouvent : Europe/Monaco
, Asia/Singapore
, mais il existe également des exceptions — US/Pacific
.
Officiellement, il y a actuellement 599 fuseaux horaires. Pensez-y : 599. C'est loin d'être 24. Bienvenue dans le monde global.
La ZoneId
classe du java.time
package est utilisée pour stocker un fuseau horaire en Java.
Soit dit en passant, il a une getAvailableZoneIds()
méthode statique, qui renvoie l'ensemble de tous les fuseaux horaires actuellement connus. Pour obtenir une liste de toutes les zones, vous devez écrire le code suivant :
Code | Sortie console (partielle) |
---|---|
|
|
Pour obtenir un ZoneId
objet par son nom, vous devez utiliser la of()
méthode statique ;
Code | Note |
---|---|
|
|
2. Créer un ZonedDateTime
objet
Lors de la création d'un ZonedDateTime
objet, vous devez appeler la now()
méthode statique de la classe et ZoneId
lui transmettre un objet.
Code | Sortie console |
---|---|
|
|
Si vous ne transmettez pas d' ZoneId
objet à la now()
méthode (et que cela est autorisé), le fuseau horaire est déterminé automatiquement en fonction des paramètres de l'ordinateur qui exécute le programme.
Exemple:
Code | Sortie console |
---|---|
|
|
Convertir une date globale en une date locale
L'une des caractéristiques intéressantes de ZonedDateTime
est sa capacité à convertir une date et une heure locales. Exemple:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Travailler avec le temps
Comme la LocalDateTime
classe, la ZonedDateTime
classe a de nombreuses façons d'obtenir des éléments individuels d'une date et d'une heure. Voici une liste de ces méthodes :
|
Renvoie l'année d'une date spécifique |
|
Renvoie le mois de la date : une constante parmi plusieurs —JANUARY, FEBRUARY, ...; |
|
Renvoie l'index du mois de la date. janvier == 1 |
|
Renvoie l'indice du jour du mois |
|
Renvoie le jour de la semaine : une constante parmi plusieurs —MONDAY, TUESDAY, ...; |
|
Renvoie l'indice du jour de l'année |
|
Renvoie les heures |
|
Renvoie les minutes |
|
Renvoie les secondes |
|
Renvoie les nanosecondes |
Toutes les méthodes sont parfaitement analogues aux méthodes de la LocalDateTime
classe. Et, bien sûr, la ZonedDateTime
classe a des méthodes qui vous permettent de travailler avec des dates et des heures. Cela dit, l'objet sur lequel les méthodes sont appelées ne change pas. Au lieu de cela, ils renvoient un nouvel ZonedDateTime
objet :
Méthodes | Description |
---|---|
|
Ajoute des années à la date |
|
Ajoute des mois à la date |
|
Ajoute des jours à la date |
|
Ajoute des heures |
|
Ajoute des minutes |
|
Ajoute des secondes |
|
Ajoute des nanosecondes |
|
Soustrait des années à la date |
|
Soustrait des mois de la date |
|
Soustrait des jours de la date |
|
Soustrait des heures |
|
Soustrait des minutes |
|
Soustrait des secondes |
|
Soustrait des nanosecondes |
Nous ne donnerons pas d'exemples, car nous pensons que tout ici est clair par analogie avec les classes que nous venons de considérer.
GO TO FULL VERSION