I want to parse a DateTime using the joda library (in scala, but should be the same with java).
The source looks like
val dateParser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss z")
val date = dateParser.parseDateTime("2012-08-28 15:35:00 CEST")
In Java this would look like
DateTimeFormatter dateParser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss z");
DateTime date = dateParser.parseDateTime("2012-08-28 15:35:00 CEST");
Unfortunately this doesn’t work but throws an exception:
java.lang.IllegalArgumentException: Invalid format: "2012-08-28 15:35:00 CEST" is malformed at "CEST"
Why doesn’t this work? Of course I could ignore the “CEST” part and just parse the rest, but in the input “CEST” can be replaced by “CET” sometimes, so I don’t want to ignore it.
The issue is because
CESTis a short zone name that is not unique. See the detailed discussion from DateTimeFormatter Bug parsing with general time zones in US Locale?You can use the latest version from github that should contain a fix, see this commit.
You should be able to use
DateTimeFormatterBuilder#appendTimeZoneShortNameto addCESTas an alias for “America/Chicago” or to how you would like to interpretCEST.