java.util.Date is generating a wrong date?

2020-02-02 03:32发布

Here's my code:

java.util.Date TODAY = new java.util.Date();     
SimpleDateFormat SDF = new SimpleDateFormat( "YYYY-MM-DD" );
System.out.println ( SDF.format( TODAY ) );'

And the result is:

2015-02-33

But today's date is 2015-02-02!

What may be the reason behind this wrong output?

3条回答
家丑人穷心不美
2楼-- · 2020-02-02 03:51

What may be the reason behind this Wrong Output ?

Your assumptions about the date format string are wrong, the output is correct.

y   Year
Y   Week year
D   Day in year
d   Day in month
M   Month in year
m   Minute in hour

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Y Week year will usually give incorrect results around new year. D will give incorrect results from February. So your format appeared fine most of last month.

查看更多
不美不萌又怎样
3楼-- · 2020-02-02 04:05

You want to use the yyyy year and dd day of the month.

However, I suggest you migrate to JSR-310 which is built into Java 8 and available for earlier versions of Java. The same code is

System.out.println(LocalDate.now());

prints

2105-02-02
查看更多
Explosion°爆炸
4楼-- · 2020-02-02 04:06

When format for SimpleDateFormat is specified as follows:

SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
  • the YYYY - means week year,
  • the MM - means month,
  • the DD - means day in year.

Week year here is not what you wanted. See what is week year.

Your today's date is 2015-02-02, which means that it is 32 days since the beginning of the year 2015 passed and your are on the 33 day. That is why you get date "2015-02-33".

To mean year (and not week year) and day in month change format to SimpleDateFormat("yyyy-MM-dd");

查看更多
登录 后发表回答