1. Classe DateTimeFormatter

La classe spéciale DateTimeFormattertrouve son chemin dans l'API Date Time. Son but est de permettre aux programmeurs de convertir aussi facilement que possible une date et une heure dans le format exact qu'ils souhaitent. Et nous sommes heureux d'annoncer que les créateurs de Java ont réussi.

Son utilisation est très simple. Tout d'abord, vous devez créer une DateTimeFormatterclasse et transmettre un modèle qui spécifie comment il affichera la date et l'heure :

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

dtfest une DateTimeFormattervariable. est une méthode statique de la classe. Et pattern est une chaîne qui spécifie le modèle qui sera utilisé pour afficher la date et l'heure.DateTimeFormatter.ofPattern()DateTimeFormatter

Exemples

Code Sortie console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

Dans l'exemple ci-dessus, nous utilisons la ofPattern()méthode pour créer un DateTimeFormatterobjet basé sur le modèle. Et dans la ligne suivante, nous utilisons la format()méthode pour convertir un LocalDateTimeobjet en chaîne. Vous voyez le résultat à l'écran.

Vous pouvez transmettre presque n'importe quel objet de l'API Date/Heure à la format()méthode.

Le statique ofPattern()est également très simple : il prend un motif en argument et renvoie un DateTimeFormatterobjet. La partie la plus intéressante se trouve dans le motif.


2. Modèle de formatage

La chaîne transmise en tant que modèle est utilisée comme modèle lors de l'affichage d'informations. MM est remplacé par le numéro du mois, jj par le jour du mois et aa par le numéro de l'année. La casse des lettres est importante.

Le tableau complet pour ces modèles de temps est celui-ci :

Lettre Signification
y Année
M Mois
d Jour
H Heures
m Minutes
s Secondes
S Millièmes de seconde
n Nanosecondes.

Pas particulièrement difficile à retenir.

Mais pourquoi le motif de l'exemple comprend-il les lettres répétées MM, jj et aa ? Eh bien, c'est là que ça devient plus intéressant.

Idée générale

Le nombre de lettres affecte la longueur du texte. Plus il y a de lettres, plus le texte sera long.

Si la lettre H est spécifiée une fois, alors 9 heures seront affichées sous la forme 9, mais si la lettre H est spécifiée deux fois de suite, alors 9 heures seront affichées sous la forme 09.

Si la lettre y est spécifiée 2 fois de suite, l'année est écrite sur 2 chiffres. Si cela se produit 4 fois de suite, alors 4 chiffres sont utilisés.

Si la lettre M est spécifiée 2 fois de suite, le numéro du mois est écrit. Si 3 fois de suite, le nom du mois (ses 3 premières lettres) est utilisé. Si 4 fois de suite, le nom complet du mois est utilisé.

Exemple:

Code Sortie console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. Compléter le tableau des patrons

Le tableau complet est assez grand et super intéressant :

Modèle Les variantes du motif Exemple Description
y aaaaaaaa 19; 2019 Année
M/G M, MM, MMM, MMMM, MMMMM 1; 01 ; Jan; Janvier; J Mois
d j, jj 9; 09 Jour
H H, HH 2 ; 02 Heures
m m, mm 3 ; 03 Minutes
s s, ss 5 ; 05 Secondes
S S, SS, SSS, ... 1; 12; 123 Millièmes de seconde
n n 123456789 Nanosecondes
g G, GGGG, GGGGGG PUBLICITÉ; Anno Domini ; UN; Ère
Q/q q, qq, qqq, qqqq 3 ; 03 ; Q3 ; 3e trimestre Trimestre
w w 13 Semaine de l'année
O O 3 Semaine du mois
E EEE, EEEE, EEEEE Lun; Lundi; M Jour de la semaine
e/c e, ee, eee, eeee, eeeee 1; 01 ; Lun; Lundi; M Jour de la semaine
un un PM AM ou PM
h h 12 Horloge de 12 heures.
V VV Europe/Helsinki Fuseau horaire
z z zzzz EET; Heure normale d'Europe de l'Est Fuseau horaire
O O OOOO GMT+2 ; GMT+02:00 Fuseau horaire

Soit dit en passant, ce n'est pas vraiment une version complète. Vous pouvez trouver la version la plus complète ici .



4. Temps d'analyse

La DateTimeFormatterclasse est également intéressante pour sa capacité non seulement à convertir une date et une heure en une chaîne selon un modèle donné, mais aussi à effectuer l'opération inverse !

L'analyse d'une chaîne consiste à la diviser en jetons significatifs.

Voici à quoi ça ressemble :

Code Sortie console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Tout d'abord, nous créons un DateTimeFormatterobjet et définissons le modèle utilisé pour l'analyse.

Ensuite, nous appelons la méthode LocalDate.parse()ou LocalTime.parse()ou LocalDateTime.parse()et transmettons la chaîne à analyser avec l' DateTimeFormatterobjet, qui comprend comment analyser le texte passé et quel modèle doit être utilisé pour le faire.

Autre exemple : cette fois, nous allons analyser le temps.

Code Sortie console
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59