web-dev-qa-db-fra.com

Comment convertir la chaîne 2018-04-10T04: 00: 00.000Z en DateTime?

Je reçois une date d'une API JSON qui ressemble à ceci "2018-04-10T04: 00: 00.000Z". Je veux le convertir afin d'obtenir un objet Date ou String et obtenir quelque chose comme "01-04-2018" que son "jj-MM-AAAA". Comment puis-je le faire?

13
Miguel Barra

Mise à jour: en utilisant DateTimeFormat, introduit dans Java 8:

L'idée est de définir deux formats: un pour le format d'entrée et un pour le format de sortie. Analyser avec le formateur d'entrée, puis formater avec le formateur de sortie.

Votre format d'entrée semble assez standard, sauf le Z de fin. Quoi qu'il en soit, traitons ceci: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". La fin 'Z' est la partie intéressante. Il y a généralement des données de fuseau horaire ici, comme -0700. Le modèle serait donc ...Z, c'est-à-dire sans apostrophes.

Le format de sortie est beaucoup plus simple: "dd-MM-yyyy". Attention aux petits y -s.

Voici l'exemple de code:

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse("2018-04-10T04:00:00.000Z", inputFormatter);
String formattedDate = outputFormatter.format(date);
System.out.println(formattedDate); // prints 10-04-2018

Réponse originale - avec l'ancienne API SimpleDateFormat

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = inputFormat.parse("2018-04-10T04:00:00.000Z");
String formattedDate = outputFormat.format(date);
System.out.println(formattedDate); // prints 10-04-2018
28
Tamas Rev

Utilisation du modèle de date yyyy-MM-dd'T'HH:mm:ss.SSS'Z' et Java 8 vous pourriez faire

String string = "2018-04-10T04:00:00.000Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date);

Mise à jour: pour les utilisateurs de 26 ans avant Joda

String string = "2018-04-10T04:00:00.000Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
LocalDate date = org.joda.time.LocalDate.parse(string, formatter);

Dans le fichier app/build.gradle, ajoutez comme ceci-

dependencies {    
    compile 'joda-time:joda-time:2.9.4'
}
3
Debmalya Biswas