1

私は Android アプリケーションを作成していますが、Calendar で奇妙な動作が見られるので、次のテストを作成しました。

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);
    }
}

両方のテストに合格すると思いますが、2 番目のテストは次のエラーで失敗します。

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

ということで、暦月を1(2月)にするとgetメソッドは2(3月)を返すようです。誰かが以前にこのような動作を見たことがありますか、または何が原因であるかを知っていますか? それとも私は愚かなことをしただけですか?

注: これらのテストは、Android Junit テストとして Android フォンで実行されます。

編集: 2 月にのみ開催され、今日は 4 月 30 日であることに気付きました。私自身の質問に答えたようです。

4

1 に答える 1

1

DAY_OF_MONTHを 1 番目に設定する必要があります。初期化されていない場合は、現在の日付が使用されます。これは、今日が 30.04.2012 であることを意味します。月を 2 月に設定すると、2012 年 2 月 30 日になります。この日付は存在しないため、カレンダーの実装は 3 月に切り替わります。

于 2012-04-30T08:12:14.270 に答える