我想使用joda库(在scala中,但是与Java相同)解析DateTime。

来源看起来像

val dateParser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss z")
val date = dateParser.parseDateTime("2012-08-28 15:35:00 CEST")


在Java中,这看起来像

DateTimeFormatter dateParser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss z");
DateTime date = dateParser.parseDateTime("2012-08-28 15:35:00 CEST");


不幸的是,这不起作用,但是会引发异常:

java.lang.IllegalArgumentException: Invalid format: "2012-08-28 15:35:00 CEST" is malformed at "CEST"


为什么不起作用?当然,我可以忽略“ CEST”部分,而只分析其余部分,但是有时在输入中“ CEST”可以用“ CET”代替,所以我不想忽略它。

最佳答案

问题是因为CEST是不唯一的短区域名称。请参阅DateTimeFormatter Bug parsing with general time zones in US Locale?中的详细讨论

您可以使用github中应该包含修复程序的最新版本,请参见this commit

您应该能够使用DateTimeFormatterBuilder#appendTimeZoneShortNameCEST添加为“美国/芝加哥”的别名,或者添加您想解释CEST的方式。

09-27 23:59