为什么Joda DateTimeFormatter无法解析时区名称('z')

时间:2010-12-21 10:26:25

标签: java jodatime

来自DateTimeFormatter javadoc

  

区域名称:无法解析时区名称('z')。

因此,时区解析如下:

System.out.println(new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse("Fri Nov 11 12:13:14 JST 2010"));

无法在Joda中完成:

DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss z yyyy");
System.out.println(dtf.parseDateTime("Fri Nov 11 12:13:14 JST 2010"));
//Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "Fri Nov 11 12:13:14 JST 2010" is malformed at "JST 2010"
//at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:673)

3 个答案:

答案 0 :(得分:14)

我认为原因是'z'时区名称是传统的(非标准化)和含糊不清的;即根据您的原籍国,它们意味着不同的东西。例如,“PST”可以是“太平洋标准时间”或“巴基斯坦标准时间”。

如果您有兴趣,this site会列出大量时区名称。发现存在歧义的案例并不难。

答案 1 :(得分:5)

可能是因为某些时区缩写不明确且解析器无法知道哪个时区。

当然,在与Joda合作一段时间之后,你可能会发现这是一个微小的奇怪的嘀嗒声和缺失的功能。

答案 2 :(得分:3)

缩短的时区确实含糊不清,如DateTimeZone javadoc所述,Joda更进一步取消对它们的支持: