Java 1.7 GregorianCalendar计算错误的日期

-2 java gregorian-calendar

我遇到了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 ) );
}
Run Code Online (Sandbox Code Playgroud)

它将失败:

java.lang.AssertionError: expected:<22> but was:<23>
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

Joe*_*oey 6

你从2004年10月到2005年10月.两者之间没有闰日,因此这个月的日子仍然是23日.现在,如果你从2003-10-23开始那就不同了.