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 Calendar
sa 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.time
package est le package de base de l'API Java Date Time : il contient des classes telles que LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
et 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.format
package 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 DateTimeFormatter
classe polyvalente, qui remplace la SimpleDateFormat
classe.
Le java.time.zone
package contient des classes pour travailler avec les fuseaux horaires. Il contient des classes telles que TimeZone
et 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. LocalDate
classe
La première et la plus utile des classes de l'API Date/Heure que nous allons examiner est la LocalDate
classe. 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 LocalDate
classe 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 LocalDate
objet, 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ù today
est une LocalDate
variable et LocalDate.now()
est un appel à la now()
méthode statique de la LocalDate
classe.
Exemple:
Code | Sortie console |
---|---|
|
|
Obtenir une date dans un fuseau horaire spécifique
La LocalDate
classe 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 ZoneId
classe (java.time.ZoneId). Il a une of()
méthode qui renvoie un ZoneId
objet 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 LocalDate
objet 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ù date
est une LocalDate
variable et est un appel à la méthode statique de la classe.LocalDate.of()
of()
LocalDate
Ici, nous voyons la FEBRUARY
constante de la Month
classe (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 ofYearDay
mé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ù year
est le numéro de l'année et day
est 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 Date
les 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 LocalDate
classe 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ù day
est 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 LocalDate
les objets, mais vous pouvez obtenir des éléments individuels de la date stockée. LocalDate
les 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 LocalDate
objet
La LocalDate
classe 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 String
classe : elles ne modifient pas l' LocalDate
objet existant, mais en renvoient un nouveau avec les données souhaitées.
Voici les méthodes de la LocalDate
classe :
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 object
mé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