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

时间:2015-02-02 10:54:16

标签: java simpledateformat java.util.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!

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

3 个答案:

答案 0 :(得分:4)

您希望使用该月的yyyy年和dd天。

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

是相同的代码
System.out.println(LocalDate.now());

打印

2105-02-02

答案 1 :(得分:2)

  

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

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

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月份提供错误的结果。因此,您的格式在上个月的大部分时间都显得很好。

答案 2 :(得分:1)

当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 “);