月份减去一个(不是因为它基于0)

Bra*_*pit 11 java date

当我在一个代表1970年1月1日的日期设置月份,然后立即返回月份时,它会被一个人关闭.

import java.util.Date;

@Test
public void monthShouldBeExpectedValue() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date(0));

    int expectedMonth = Calendar.JUNE;
    calendar.set(Calendar.MONTH, expectedMonth);
    int actualMonth = calendar.get(Calendar.MONTH);

    assertThat(actualMonth, equalTo(expectedMonth)); // test fails: expected 5 got 6
}
Run Code Online (Sandbox Code Playgroud)

如果我改变这一行

calendar.setTime(new Date(0));
Run Code Online (Sandbox Code Playgroud)

calendar.setTime(new Date());  // use 'today' instead of 1/1/1970
Run Code Online (Sandbox Code Playgroud)

然后测试通过.谁知道为什么?

编辑

日期的印刷版本是:

new Date(0):         Wed Dec 31 19:00:00 EST 1969
date from calendar:  Tue Jul 01 19:00:00 EDT 1969
Run Code Online (Sandbox Code Playgroud)

我正在运行一个旧的JDK:1.6.0_30-b12(64位)

我在东部标准时间.

Sma*_*ker 13

我的猜测是,由于你当前的时区,时间被解释为1969年12月31日+一堆小时.因此,将月份设置为6月将导致1969年6月31日(不存在; 6月为30天).因此它将延续至7月.