Comment convertir un string JSON en date (DateTime) en Java ?

Le langage Java est un langage ancien, mais qui a été amélioré pour s'adapter aux formats de données qui sont arrivés au fur et à mesure de l'histoire de l'informatique. Afin de gérer les dates, il existe des classes permettant de transformer une date issue d'un format que ne gérerait pas Java de manière standard. On peut donc bien convertir une date stockée dans une chaîne issue d'un fichier JSON en DateTime. La manière dépend de la version de Java utilisée.

N'importe quel format de date peut être stocké dans un fichier JSON, car il est stocké comme une chaîne de caractère, sans contrôle particulier. Par exemple, le format de date ISO 8601 n'est pas pris en charge directement par Java. Il comprend la date et l'heure au format américain, séparées par un "T" majuscule, suivies d'un point et d'une chaîne indiquant le fuseau horaire. Par exemple, le "000Z" indique le fuseau horaire "UTC".

//Exemple de date au format ISO 8601
2021-01-15T16:00:00.000Z

Depuis la version 8 de Java, un nouvel objet est utilisé pour le formatage de dates : l'objet "DateTimeFormatter". La méthode "ofPattern()" permet de créer une instance qui gérera le format spécifié. On peut, en deuxième paramètre, préciser une langue locale qui va déterminer notamment les jours et mois en chaînes de caractères. Le langage Java peut interpréter toutes les données de la date, excepté les caractères "Z" et "T", qu'il ne comprend pas. On peut spécifier dans la chaîne un caractère qui doit être ignoré en l'encadrant entre 2 apostrophes. La fonction "parse()" permet de récupérer la date issue du JSON pour la transformer en objet, et la fonction "format()" convertit la date en chaîne, avec le format voulu.

DateTimeFormatter formatEntree = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH),
DateTimeFormatter formatSortie = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.FRENCH),
LocalDate date = LocalDate.parse("2021-01-15T16:00:00.000Z", formatEntree),
String nouvelleDate = formatSortie.format(date),
System.out.println(nouvelleDate), // Affiche 15/01/2021

Si vous travaillez avec une version de Java antérieure à la version 8, alors vous devez utiliser l'objet "SimpleDateFormat". L'utilisation diffère légèrement de l'objet "DateTimeFormatter", mais les fonctions "parse()" et "format()" s'utilisent de la même manière.

SimpleDateFormat formatEntree = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"),
SimpleDateFormat formatSortie = new SimpleDateFormat("dd/MM/yyyy"),
Date date = formatEntree.parse("2021-01-15T16:00:00.000Z"),
String nouvelleDate = formatSortie.format(date),
System.out.println(nouvelleDate), // prints 15/01/2021

Java