2016-11-22 42 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