1

我正在编写一个 Android 应用程序,我从日历中看到了一些奇怪的行为,所以我编写了以下测试:

public void testCalendar1(){
    int[] months = {
            Calendar.JANUARY,
            Calendar.FEBRUARY,
            Calendar.MARCH,
            Calendar.APRIL,
            Calendar.MAY,
            Calendar.JUNE,
            Calendar.JULY,
            Calendar.AUGUST,
            Calendar.SEPTEMBER,
            Calendar.OCTOBER,
            Calendar.NOVEMBER,
            Calendar.DECEMBER,
    };
    for(int i = 0; i < months.length; i++){
        assertEquals(months[i], i);
    }
}

public void testCalendar2(){
    Calendar cal = Calendar.getInstance();
    for(int i = 0; i < 12; i++){
        cal.set(Calendar.MONTH, i);
        assertEquals(cal.get(Calendar.MONTH), i);
    }
}

我希望两个测试都能通过,但第二个测试失败并出现错误:

junit.framework.AssertionFailedError: expected:<2> but was:<1>
at ...

因此,似乎当日历月设置为 1(二月)时,get 方法返回 2(三月)。有没有人见过这样的行为或知道可能是什么原因造成的?还是我刚刚做了一些愚蠢的事情?

注意:这些测试在 Android 手机上作为 Android junit 测试运行。

编辑:我刚刚意识到它只发生在 2 月,而今天是 4 月 30 日。看来我已经回答了我自己的问题。

4

1 回答 1

1

您必须将 设置DAY_OF_MONTH为第一个。如果未初始化,则使用当前日期,即今天的 30.04.2012。当您将月份设置为 2 月时,它将是 2012 年 2 月 30 日,因为此日期不存在,日历实施会切换到 3 月。

于 2012-04-30T08:12:14.270 回答