这是一个简单的错误开始的:我使用的YYYY不是对象的yyyy格式字符串SimpleDateFormat。但是我对使用格式错误的字符串的测试结果完全感到困惑。
这段代码:
@Test
public void whatTheHell() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
Date d1 = sdf.parse("01/07/2016");
Date d2 = sdf.parse("02/08/2016");
Date d3 = sdf.parse("11/29/2027");
System.out.println(d1.toString());
System.out.println(d2.toString());
System.out.println(d3.toString());
} catch (ParseException pe) {
fail("ParseException: " + pe.getMessage());
}
}
产生以下输出:
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026
我在这里阅读了有关’Y’参数的文档:https
:
//docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html,但是我仍然看不到在这里工作。特别是最后一种情况:我可以有点理解如何将1月(也许2月)的日期转换为上一年的12月,但是将11月29日的日期向后移动11个月会令我感到困惑。那么12月27日有什么特别之处?
谁能解释?
更多信息
@Jan建议依赖toString()方法可能是个问题,因此我定义了一种日期格式,以YYYY MM dd '-' yyyy MM
dd与上述相同的代码进行打印。这是其他输出:
2016 12 27 - 2015 12 27
2016 12 27 - 2015 12 27
2027 12 27 - 2026 12 27