0

ich diesen Standard Datum Zeit vom Server empfange:Simple Fehler - unparseable Datum Mo 14. Dezember 13.25.00 CET 2015

Mon Dec 14 13:25:00 CET 2015

Ich benutze diesen Code es in Datum verdeckte:

DateFormat formatter; 
//"Mon Dec 14 13:25:00 CET 2015 
formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 

Aber es gibt mir Fehler:

java.text.ParseException: Unparseable date: "Mon Dec 14 13:25:00 CET 2015" (at offset 20)

+0

http://stackoverflow.com/questions/2009207/java-unparseable-date-exception –

+0

Bitte können Sie testen ... Ich habe viele Post durch ... aber immer noch bekommen Fehler ... @IntelliJAmiya Es wird wirklich hilfreich sein ... –

Antwort

0

Der Eingang hat Wochentag und Monatsnamen in Englisch, so ist es pr möglicherweise ein Gebietsschema Problem. SimpleDateFormat verwendet das Standardgebietsschema des Systems, wenn Sie keines angeben - überprüfen Sie den Wert java.util.Locale.getDefault() in Ihrem System, wahrscheinlich wird es nicht en (Englisch) sein.

Wenn Sie das Gebietsschema festgelegt, sollten die Dinge funktionieren:

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
formatter.parse("Mon Dec 14 13:25:00 CET 2015")); 

Neue Java Date/Time API

Die alten Klassen (Date, Calendar und SimpleDateFormat) haben lots of problems und design issues und Sie werden durch die neuen APIs ersetzt. Wenn Sie Java 8 verwenden, ziehen Sie die Verwendung der new java.time API in Betracht. Es ist einfacher, less bugged and less error-prone than the old APIs.

Wenn Sie mit Java < = 7, können Sie die ThreeTen Backport, eine große Rückportierung für neue Java-8s Datum/Zeit-Klassen verwenden. Und für Android gibt es die ThreeTenABP (mehr darüber, wie man es verwendet here).

Der folgende Code funktioniert für beide. Der einzige Unterschied ist die Paketnamen (in Java 8 ist java.time und in ThreeTen Backport (oder Android ThreeTenABP) ist org.threeten.bp), aber die Klassen und Methoden Namen sind die gleichen.

Ein großer Unterschied ist, dass die neue API IANA timezones names (immer im Format Continent/City, wie America/Sao_Paulo oder Europe/Berlin) verwendet. Vermeiden Sie die 3-Buchstaben-Abkürzungen (wie CET oder), weil sie ambiguous and not standard sind.

Sie können eine Liste der verfügbaren Zeitzonen (und wählen Sie die, die am besten zu Ihrem System passt), indem Sie ZoneId.getAvailableZoneIds() aufrufen. In Ihrem Fall ist CET eine Abkürzung für „Central European Time“, aber es gibt mehr als 30 verschiedene Regionen (oder Zeitzonen), die CET Abkürzung verwendet:

Europe/Ljubljana, Europe/Rome, Atlantic/Jan_Mayen, Europe/Berlin, Africa/Ceuta, Africa/Algiers, Europe/Zurich, Europe/Oslo, Europe/Amsterdam, Poland, Europe/Stockholm, Europe/Vatican, Europe/Budapest, Europe/Gibraltar, Europe/Bratislava, Europe/San_Marino, Europe/Madrid, Europe/Zagreb, Europe/Copenhagen, Europe/Malta, Europe/Brussels, Europe/Vienna, Europe/Busingen, Europe/Vaduz, Europe/Warsaw, Europe/Prague, Europe/Skopje, Europe/Podgorica, Europe/Paris, Africa/Tunis, Europe/Sarajevo, Europe/Tirane, Europe/Luxembourg, Europe/Andorra, Europe/Belgrade, Arctic/Longyearbyen, Europe/Monaco

ich einen für diesen Test ausgewählt habe, fielen aber Wählen Sie den für Ihr System am besten geeigneten aus.

// create formatter (this is thread-safe, while SimpleDateFormat isn't) 
DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
    // pattern for date/time 
    .appendPattern("EEE MMM dd HH:mm:ss ") 
    // timezone (use Europe/Berlin as prefered value for CET) 
    .appendZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Europe/Berlin"))) 
    // year 
    .appendPattern(" yyyy") 
    // use English locale to parse weekday and month name 
    .toFormatter(Locale.ENGLISH); 

// ZonedDateTime is a date and time with a timezone 
ZonedDateTime z = ZonedDateTime.parse("Mon Dec 14 13:25:00 CET 2015", fmt); 
System.out.println(z); // 2015-12-14T13:25+01:00[Europe/Berlin] 

Der Ausgang wird sein:

wird
System.out.println(z.format(fmt)); // Mon Dec 14 13:25:00 CET 2015 

Der Ausgang:

2015-12-14T13:25+01:00[Europe/Berlin]

Wenn Sie ein benutzerdefiniertes Format möchten, können Sie die Formatierungs auch verwenden können

Mon Dec 14 13:25:00 CET 2015