0

如果日历在当月的最后一天(比如 7 月 31 日),将

c.add(Calendar.DAY_OF_MONTH, 1);

将 c 设置为同月的开始,即 7 月,还是将 c 提前到下个月的 8 月?

4

2 回答 2

1

查看超类的文档java.util.Calendar,在名为“字段操作”的部分(强调我的):

add(f, delta)添加delta到字段f。这相当于调用set(f, get(f) + delta)了两个调整:

添加规则 1。调用后fieldf的值减去调用f前field 的值,以 fielddelta中发生的任何溢出为模f当字段值超出其范围时会发生溢出,因此,下一个较大的字段会递增或递减,并且字段值会调整回其范围内。

因此add(Calendar.DAY_OF_MONTH, 1)将 7 月 31 日更改为 8 月 1 日

相反,文档继续:

roll(f, delta)添加delta到字段f而不更改更大的字段。这相当于add(f, delta)通过以下调整调用:

滚动规则调用后较大的字段保持不变。较大的字段表示较大的时间单位。DAY_OF_MONTH是一个比 更大的场HOUR

因此roll(Calendar.DAY_OF_MONTH, 1)将 7 月 31 日更改为 7 月1 日

于 2016-07-16T04:15:55.277 回答
0

Calendar 对象中的月份从 0 开始。所以 1 表示二月。你知道 2 月的最后一天是 28 日,所以输出应该是 3 月 2 日。

0 = January = Calendar.JANUARY
1 = february = Calendar.FEBRUARY

所以

Calendar calendar = new GregorianCalendar();

int year       = calendar.get(Calendar.YEAR);
int month      = calendar.get(Calendar.MONTH); 
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // Jan = 0, not 1
于 2016-07-16T03:46:49.393 回答