我发现CET不是Joda时间的有效时区:
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并没有说很多。
答案 0 :(得分:1)
您引用的文档也说:
区域名称:无法解析时区名称(' z')。
否则,如果您使用DateTimeFormatterBuilder
,则可以使用其方法appendTimeZoneName(Map<String,DateTimeZone>)指定查找映射。默认情况下,此查找映射由辅助方法DateTimeUtils.getDefaultTimeZoneNames()提供,该方法仅生成一些美国位于时区的英文名称:
•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
解决方案:定义您自己的包含字符串&#34; CET&#34;的查找映射,或使用更好的库进行时区名称解析(例如:Java-8 aka java .time-package做得更好。)