在Java中使用Calendar的add()方法添加超过30天

Hae*_*aes 14 java calendar

我不太确定在向Java Calendar对象添加超过30天时要使用哪个字段.是否有什么区别Calendar.DAY_OF_MONTHCalendar.DAY_OF_YEAR

例:

GregorianCalendar d = new GregorianCalendar();
d.add(Calendar.DAY_OF_YEAR, 90);
Run Code Online (Sandbox Code Playgroud)

VS

GregorianCalendar d = new GregorianCalendar();
d.add(Calendar.DAY_OF_MONTH, 90);
Run Code Online (Sandbox Code Playgroud)

谢谢.

Thi*_*ilo 17

当你打电话给我时,我觉得它没有什么区别.当你打电话给吸气者时,区别很重要.

这两种方法都很好,对吧?超过30天,以及负数.

GregorianCalendar #add的(公认复杂的)来源有这一部分:

 case DAY_OF_MONTH: // synonym of DATE
 case DAY_OF_YEAR:
 case DAY_OF_WEEK:
    break;
Run Code Online (Sandbox Code Playgroud)

  • 在API文档中明确定义了使用add方法时的上溢/下溢行为:"当字段值超出其范围时会发生溢出,因此,下一个更大的字段会递增或递减,并且字段值会被调整回到它的范围." 因此溢出DAY_OF_MONTH字段意味着MONTH字段(下一个较大)递增,DAY_OF_MONTH字段设置为1(调整回其有效范围). (2认同)