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

2022-09-02 13:15:15

From 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)

答案 1

我认为原因是“z”时区名称是常规的(非标准化的)并且模棱两可;也就是说,它们意味着不同的东西,这取决于你的原籍国。例如,“PST”可以是“太平洋标准时间”或“巴基斯坦标准时间”。

如果您有兴趣,此站点列出了大量时区名称。发现存在歧义的情况并不难。


答案 2

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

当然,它也可能是您在与Joda合作一段时间后发现的微小,奇怪的蜱虫和缺失的功能之一。


推荐