2016-11-22 43 views
0

我才發現CET不是喬達時間有效時區:時區的喬達DateTimeFormat名單

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 

是什麼時區的正式名單? CET是java.util.Calendar的有效值,但顯然不在Joda中。 documentation不說很多。

回答

1

你所引用的文件也說:

區域名稱:( 'Z')無法解析時區的名稱。

否則,如果您使用DateTimeFormatterBuilder那麼你可以使用它的方法與appendTimeZoneName(Map<String,DateTimeZone>)指定查找地圖。

•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 

解決方案:定義包含字符串「CET」自己查找,地圖默認情況下,查找地圖是通過輔助方法DateTimeUtils.getDefaultTimeZoneNames()只產生一些美國本地時區的英文名稱定,或者爲timezone-name-parsing使用更好的庫(例如:Java-8 aka java.time-package可以更好地實現它)。

+0

世界其他地方呢? – stef

+0

@stef Joda-Time不支持解析世界其他地區(即其他時區名稱縮寫),例如CET ...除非您願意設置您自己的名稱區域查找映射(如由答案中的給定鏈接描述)。這裏其他時間庫一直都比較好,即使是'SimpleDateFormat'(儘管我不推薦它因其他原因)。請記住,Joda-Time現在處於維護模式,因此未來不會有大的增強功能,因此無法解決此限制。 –

+0

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