2016-11-22 2 views
0

ich entdecke gerade CET für Joda Zeit keine gültige Zeitzone:Joda Datetimeformat Liste von Zeitzonen

DateTimeFormatter DATE_TIME_FORMATTER = 
    DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss.SSS z"); 

DateTime.parse("25/11/2016 11:50:00.000 CET", DATE_TIME_FORMATTER)`  
    -> java.lang.IllegalArgumentException: Invalid format: "25/11/2016 11:50:00.000 CET" is malformed at "CET"` 

DateTime.parse("25/11/2016 11:50:00.000 PST", DATE_TIME_FORMATTER)`  
    -> OK 

Was ist die offizielle Liste von Zeitzonen? CET ist ein gültiger Wert für java.util.Calendar, aber anscheinend nicht in Joda. Die documentation sagt nicht viel.

Antwort

1

Die Dokumentation, die Sie zitiert auch sagt:

Zonennamen: Zeitzonennamen ('z') kann nicht analysiert werden.

Andernfalls, wenn Sie verwenden die DateTimeFormatterBuilder dann könnte man seine Methode appendTimeZoneName(Map<String,DateTimeZone>) mit Angabe einer Lookup-Karte verwenden. Standardmäßig ist diese Lookup-Karte wird durch die Hilfsmethode DateTimeUtils.getDefaultTimeZoneNames() gegeben, die nur die englischen Namen einiger US-located Zeitzonen ergibt:

•UT - UTC 
•UTC - UTC 
•GMT - UTC 
•EST - America/New_York 
•EDT - America/New_York 
•CST - America/Chicago 
•CDT - America/Chicago 
•MST - America/Denver 
•MDT - America/Denver 
•PST - America/Los_Angeles 
•PDT - America/Los_Angeles 

Lösung: Definieren Sie Ihre eigenen Lookup-Karte mit der Zeichenfolge „CET“ oder verwenden Sie eine bessere Bibliothek für Zeitzone-Name-Parsing (zum Beispiel: Java-8 aka java.time-Paket macht es besser).

+0

Was ist mit dem Rest der Welt? – stef

+0

@stef Der Rest der Welt (dh andere Abkürzungen für Zeitzonennamen) wird von Joda-Time beim Parsen nicht unterstützt, zum Beispiel CET ... es sei denn, Sie sind bereit, eine eigene Name-Zone-Lookup-Map zu erstellen beschrieben durch gegebenen Link in der Antwort). Hier waren andere Zeitbibliotheken immer besser, sogar 'SimpleDateFormat' (obwohl ich es aus vielen anderen Gründen nicht empfehle). Beachten Sie auch, dass Joda-Time jetzt im Wartungsmodus ist, so dass in der Zukunft keine großen Verbesserungen erwartet werden können und daher diese Einschränkung nicht behoben werden kann. –

+0

Ja richtig: http://www.joda.org/joda-time/timezones.html – stef