1、set方法 Calendar类的MONTH是从0开始; public class CalendarDemo { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(2009, 0, 31); cal.set(Calendar.MONTH, 3); Date testDate = cal.getTime(); System.out.println(testDate); } 结果输出为:Fri May 01 16:14:14 CST 2009; 从结果可以看出set方法会根据自然月的最大天数和传入的DAY调整日期,如上代码,四月份最大天数是4-30,所以set方法会将月份增加即五月份即5-01。 2、add方法 public class CalendarDemo { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(2009, 0, 31); Date testDate = cal.getTime(); Calendar cal1 = Calendar.getInstance(); cal1.setTime(testDate); cal1.add(Calendar.MONTH,3); Date testDate1 = cal1.getTime(); System.out.println(testDate1); } } 输出结果为:Thu Apr 30 16:23:14 CST 2009; 从结果可以看出add方法会根据自然月的最大天数调整日期,如上代码,add方法不会根据传入的DAY值调整月份,而是会根据月份调整传入的DAY; 3、roll方法 public class CalendarDemo { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(2009, 0, 31); Date testDate = cal.getTime(); Calendar cal1 = Calendar.getInstance(); cal1.setTime(testDate); cal1.roll(Calendar.MONTH, 13); Date testDate1 = cal1.getTime(); System.out.println(testDate1); } } 结果输出为:Sat Feb 28 16:38:18 CST 2009; 注意看年份,在加了13个月之后仍然是2009年,所以roll方法不会改变当前日期的最大年份, 而是会根据月份的总数减去12作为当前日历的月份,在调整月份日期方面和add方法相同。 下面是API(中文文档)对以上三个方法的介绍: 可以使用三种方法更改日历字段: set()、 add() 和 roll()。 set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段
此,多次调用 历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历 字段之后, 定的。 示例:假定
是解析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用
生重新计算。
以下两个调整:
此外,与 示例:假定
August 添加 13 个月得出的就是下一年的 September。因为在
管它是一个更小的字段,但不能根据规则 2 调整 的月份发生变化时,该值也需要发生变化。
示例:请参阅 使用模型。为了帮助理解 日、年和底层 月 31 日,并且用户按下月份的递增按钮,那么应该得到什么?如果底层实现使用 可以将该日期读为 1999 年 3 月 3 日。更好的结果是 1999 年 2 月 28 日。此外,如果用户再次 按下月份的递增按钮,那么该日期应该读为 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。 通过保存原始日期并使用 数用户所期望的那样运行。 |
|