java.util.Date 生成的日期有误?

java.util.Date is generating a wrong date?

这是我的代码:

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

结果是:

2015-02-33

但是今天的日期是 2015-02-02!

此错误输出背后的原因可能是什么?

您想使用 yyyy 年和 dd 月中的第几天。

但是,我建议您迁移到 Java 8 中内置的 JSR-310,它可用于 Java 的早期版本。同样的代码是

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

打印

2105-02-02

What may be the reason behind this Wrong Output ?

您对日期格式字符串的假设是错误的,输出是正确的

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 周年通常会在新年前后给出不正确的结果。 D 从 2 月起将给出不正确的结果。所以你的格式在上个月的大部分时间里都很好。

当 SimpleDateFormat 的格式指定如下时:

SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
  • YYYY - 表示 week year
  • MM - 表示月份,
  • DD - 表示一年中的

这里的周年不是你想要的。 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。这就是为什么你得到日期 "2015-02-33".

表示 (而不是星期年)和 月中的天 将格式更改为 SimpleDateFormat("yyyy -MM-dd");