开发者

Date-String parsing problem (due to months from 0 to 11)

The code

    String strDate = "2010-12-01";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
    Date parsedDate = sdf.parse(strDate);
    System.out.println(parsedDate);

will, dependend on your locale, produce the following output:

Fri Jan 01 00:12:00 CET 2010

The date is not parsed correctly, since i expect the 1st dec and not the 1st jan. I know, months are numbered from 0 t开发者_StackOverflow中文版o 11, so the 12 becomes a 0 for january.

I have several solutions for this problem in mind, but all of them will produce at least 3-4 additional lines of code. So my question is:

What is the nicest way to solve this "problem"?

I can't imagine that it takes more than 2-3 lines to parse a simple date...

//edit: Shame on me for this question. Forgive me. thx folks


change yyyy-mm-dd to yyyy-MM-dd


M   Month in year   Month   July; Jul; 07  

m   Minute in hour  Number  30

See

  • SimpleDateFormat


Your date format is incorrect: Months are MM (not mm, which is for minutes). Try this:

"yyyy-MM-dd"

The reason you are getting January is that you haven't given a month to the parser (you gave year-minute-day). January, the first month, is the default month allocated to the date if not provided by the input. The 12 got parsed into the minute field (fairly obviously)


What is the nicest way to solve this "problem"?

Use different classes. You are using troublesome old legacy classes. Instead use the java.time classes.

LocalDate

The LocalDate class represents a date-only value without time-of-day and without time zone. It counts months sensibly, 1-12 is January through December.

Your input string is already in one of the ISO 8601 formats. These standard formats are used by default in the java.time classes. So no need with defining a formatting pattern.

LocalDate localDate = LocalDate.parse( "2010-12-01" );

Month

Also check out the handy Month enum.

Month month = Month.of( 1 ); // January = 1, December = 12.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜