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");
这是我的代码:
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");