Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
854 views
in Technique[技术] by (71.8m points)

java - Joda DateTime: Parse date with "CEST" in string

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The issue is because CEST is 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#appendTimeZoneShortName to add CEST as an alias for "America/Chicago" or to how you would like to interpret CEST.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...