web-dev-qa-db-fra.com

Exception d'analyse de format de date - "EEE MMM jj HH: mm: ss Z aaaa"

J'ai eu un problème avec la date de l'exemple d'analyse de date:

SimpleDateFormat parserSDF=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.getDefault());


parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

a obtenu une exception

Exactement, je veux analyser cette date de format en aaaa-MM-jj J'essaie:

SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

prendre: Java.text.ParseException: date non comparable: "mer 16 oct 00:00:00 CEST 2013"


OK je change et travaille:

SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");
13
PDS

Je vais supposer que Locale.getDefault() pour vous est pl-PL puisque vous semblez être en Pologne.

Les mots anglais dans les chaînes de date provoquent donc une date impossible à analyser.

Une date polonaise appropriée String serait quelque chose comme

"Wt paź 16 00:00:00 -0500 2013"

Sinon, changez votre Locale en Locale.ENGLISH pour que l'objet SimpleDateFormat puisse analyser les dates String avec des mots anglais.

17

À la place d'utiliser Locale.default que vous et les autres ne savez souvent pas quelle valeur par défaut, vous pouvez décider en utilisant locale.ENGLISH car je vois que la date de votre chaîne est au format anglais. Si vous êtes dans d'autres pays, le format sera différent.

Voici mon exemple de code:

public static void main(String[] args) {
    try {
        SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
        Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");
        System.out.println("date: " + date.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}

Le résultat sera: date: Wed Oct 16 05:00:00 ICT 2013. Ou vous pouvez décider quelle partie de cette date sera imprimée, en utilisant ses champs.

J'espère que cette aide :)

8
hqt

Je pense que l'exception d'origine est due à Z dans votre format. Par documentation :

Z   Time zone   RFC 822 time zone   -0800

vous souhaitiez probablement utiliser des minuscules z

4
Алексей