Java SimpleDatetime parse

2019-08-28 10:13发布

Maybe i'm just missing the obvious, but I can't get SimpleDateTimes parse() method to work:

I want to parse dates like June 19, 2011. So, according to the documentation: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

for my needs it should be:

  • M: Month in year. If the number of pattern letters is 3 or more, the month is interpreted as text; --> MMM
  • d: Day in month. For parsing, the number of pattern letters is ignored unless it's needed to separate two adjacent fields --> d
  • y: Year. For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. --> yyyy

but with

SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy");
Date d = sdf.parse("June 19, 2011");

I'll always get java.text.ParseException: Unparseable date: "June 19, 2011"

Where am I thinking wrong? :)

2条回答
你好瞎i
2楼-- · 2019-08-28 10:15

I'm assuming your Locale is some German value since you seem to be in Germany. June won't parse as a German word for a month. Set your Locale to an English value.

SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH);
查看更多
在下西门庆
3楼-- · 2019-08-28 10:32

Joda-Time

Here is an example akin to the correct answer but using the Joda-Time library.

Both Joda-Time and the java.time package are far superior to the old java.util.Date an .Calendar classes bundled with Java. One of many advantages is a class, LocalDate, to represent date-only values without time-of-day or time zone.

DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMM, d, YYYY" ).withLocale( Locale.ENGLISH );
LocalDate localDate = formatter.parseLocalDate( "June 19, 2011" );
查看更多
登录 后发表回答