Java 1.7 GregorianCalendar计算错误的日期

时间:2016-08-17 07:25:09

标签: 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 ) );
}

它将失败:

java.lang.AssertionError: expected:<22> but was:<23>

我做错了吗?

1 个答案:

答案 0 :(得分:6)

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