Joda DateTimeFormat时区列表

时间:2016-11-22 11:34:47

标签: calendar jodatime

我发现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并没有说很多。

1 个答案:

答案 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做得更好。)