我想使用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#appendTimeZoneShortName
将CEST
添加为“美国/芝加哥”的别名,或者添加您想解释CEST
的方式。