我遇到了Java 1.7&GregorianCalender的问题。我知道转移到Java 8或使用Joda可能会解决我的问题,但遗憾的是这不是一个选项。
所以我试图添加365天来计算一个结束日期(添加365天可能看起来很愚蠢,而不仅仅是添加一年,但这是我的客户要求的,甚至在多次询问他想要坚持下去之后它,因为他想忽略闰年。)
总的来说一切都运作良好,但在接下来的单元测试中,它失败了他和我的期望。我现在重新计算了几次,并使用各种工具来检查我的结果,但我无法确认java的计算。
这是我的单元测试失败,因为它返回错误的日期:
@Test
public void test(){
// Get a Gregorian Calendar
Calendar cal = GregorianCalendar.getInstance();
// Remove whatever was stored previously
cal.clear();
// Set calendar to 2004-10-23
cal.set( 2004, Calendar.OCTOBER, 23 );
// Add 365 days
cal.add( Calendar.DAY_OF_YEAR, 365 );
// Calendar should be at 2005-10-22 now
Assert.assertEquals( 2005, cal.get( Calendar.YEAR ) );
Assert.assertEquals( Calendar.OCTOBER, cal.get( Calendar.MONTH ) );
Assert.assertEquals( 22, cal.get( Calendar.DAY_OF_MONTH ) );
}
它将失败:
java.lang.AssertionError: expected:<22> but was:<23>
我做错了吗?
答案 0 :(得分:6)
你从2004年10月 2004年到2005年10月。两者之间没有闰日,因此这个月的日期仍然是23日。现在,如果你从2003-10-23开始那就不同了。