J'essaye de créer un Date à partir d'un String que je reçois du serveur. Le String est:

2018-05-23T06: 39: 37 + 0000

Le format correct devrait donc être:

aaaa-MM-jj'T'HH: mm: ss.SSSZ

Voici mon code:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
try {
    Date parsedDate = simpleDateFormat.parse(createdDate);
    createdDate = parsedDate.toString();
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);

Je ne sais pas s'il existe un moyen de le faire, car après cela, je voudrais analyser à nouveau au format suivant:

jj / MM / aaaa hh: mm

J'ai essayé d'analyser l'original String en utilisant ce dernier format directement mais j'obtiens la même exception.

Toute suggestion?

1
Óscar 23 mai 2018 à 11:47

3 réponses

Meilleure réponse

Ok, la première erreur (comme vous l'avez souligné) est que je n'avais pas de millisecondes sur l'original String.

Après avoir supprimé "SSS" du simpleDateFormat, cela fonctionne comme un charme. Voici donc le code final:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat defaultDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
    Date parsedDate = defaultDateFormat.parse(createdDate);
    SimpleDateFormat finalDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault());
    createdDate = finalDateFormat.format(parsedDate);
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);
0
Óscar 23 mai 2018 à 09:22

Le format de date d'entrée String donné

2018-05-23T06: 39: 37 + 0000

Est incorrect de sorte que vous obtenez ParseException car la partie milliseconde (SSS) est absente de votre format de date aaaa-MM-jj'T'HH: mm: ss. SSS Z

Alors s'il vous plaît essayez avec

2018-05-23T06: 39: 37.235-0530

Donc le code ci-dessous devrait fonctionner

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
    try {
        Date parsedDate = simpleDateFormat.parse(createdDate);
        createdDate = parsedDate.toString();
        System.out.println(parsedDate.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
mCommentDate.setText(createdDate);
1
Sasikumar Murugesan 23 mai 2018 à 09:07

Je vois que vous avez résolu votre propre problème avec un peu d’aide dans les commentaires, mais je vous suggère d’envisager sérieusement LocalDate, car les anciennes classes Date sont parfois assez gênantes.

En fait, comme votre valeur entrante a un TimeZone, vous devrez utiliser ZonedDateTime pour analyser votre entrée.

String createdDate = "2018-05-23T06:39:37+0000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
ZonedDateTime localDate = ZonedDateTime.parse(createdDate, formatter);
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")));

Sortie:

23/05/2018 06:39

2
achAmháin 23 mai 2018 à 09:43