Joda DateTime:用字符串中的“CEST”解析日期

Hei*_*nzi 3 java datetime scala jodatime

我想使用 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")
Run Code Online (Sandbox Code Playgroud)

在 Java 中,这看起来像

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

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

java.lang.IllegalArgumentException: Invalid format: "2012-08-28 15:35:00 CEST" is malformed at "CEST"
Run Code Online (Sandbox Code Playgroud)

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

dan*_*dan 5

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

您可以使用github中应该包含修复程序的最新版本,请参阅此提交

您应该能够使用DateTimeFormatterBuilder#appendTimeZoneShortName添加CEST作为“America/Chicago”的别名或您希望如何解释CEST.