GregorianCalendar类的add和roll方法

本文介绍了Java中GregorianCalendar类的add和roll方法的使用方法。详细解释了如何通过这些方法进行日期的增减操作,并提供了具体示例来展示不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GregorianCalendar类的add和roll方法非常实用,下面作个简单介绍

add(int field, int amount)

第一个参数为作用域,可以是年,月,日,天,周,小时等,第二个参数为增加的值(注意,可以为负数)。

GregorianCalendar.add(Calendar.YEAR, -1); 表示年份减一.
GregorianCalendar.add(Calendar.MONTH, -1); 表示月份减一.
GregorianCalendar.add(Calendar.WEEK_OF_YEAR, -1); 表示周减一.
GregorianCalendar.add(Calendar.DATE, -1); 表示天减一.
GregorianCalendar.add(Calendar.DAY_OF_MONTH, -1); 表示天减一.(DATE和DAY_OF_MONTH是一样的,这个api里也有说明)

另外经过程序试验,以下几行代码的效果是一样的:

// cal.add(GregorianCalendar.DAY_OF_WEEK, 7);//效果一样
// cal.add(GregorianCalendar.DAY_OF_MONTH, 7);  //效果一样
// cal.add(GregorianCalendar.DAY_OF_YEAR, 7);   //效果一样
// cal.add(GregorianCalendar.WEEK_OF_YEAR, 1);   //效果一样,周加1
// cal.add(GregorianCalendar.DATE, 7);   //效果一样

如果现在是1月31 号,在month字段上+1,将得到2月28号,如果是闰年则为2月29日,他会对最大值做调整。如果现在是1月29号或1月30号,仍然得到2月29号,这是因为二月份中29号已经是最大日期了。


roll方法的定义      roll(int field, boolean up)   这个方法的意思是在作用域field内向前滚动一个值。

另外还有roll(int field, int amount)方法,见这个方法的定义如下:
public void roll(int field, int amount)
    {
        while (amount > 0) {
            roll(field, true);
            amount--;
        }
        while (amount < 0) {
            roll(field, false);
            amount++;
        }
    }


见如下代码:

System.out.println(cal.getTime());                ==> Mon Dec 31 16:52:44 SGT 2012
cal.roll(Calendar.DAY_OF_YEAR, true); //在年作用域内向前滚动,由于已经到了这一年的最后一天,滚动后到了这一年的第一天。
System.out.println(cal.getTime());                ==> Sun Jan 01 16:52:44 SGT 2012

System.out.println(ca.getTime());   ===>Sat Dec 01 11:17:57 CST 2012
ca.roll(Calendar.DAY_OF_WEEK, 2); ===>在周作用域内向前滚动2天,当前是星期六,滚动后变成星期一。
System.out.println(ca.getTime()); ===>Mon Nov 26 11:17:57 CST 2012


System.out.println(ca.getTime()); ===>Mon Dec 31 12:31:58 CST 2012
ca.roll(Calendar.DAY_OF_MONTH, true); ===>在月作用域内滚动,滚动后回到了这个月的第一天
System.out.println(ca.getTime()); ===>Sat Dec 01 12:31:58 CST 2012

这里有个特殊情况,当回退月份时,退1月到12月时,如果是希望得到前一年的12月的话,不能使用cal.roll(Calendar.MONTH,-1),要使用cal.add(Calendar.MONTH,-1)。

比如当前时间是2002/01/12,用cal.roll(Calendar.MONTH,-1)后是2002/12/12,用cal.add(Calendar.MONTH,-1)后是2001/12/12.


另外值得注意的是,Calendar类里表示星期的常量的值是星期日为1,星期一为2,以此类推,星期六为7。

表示月份的常量的值是1月份为0,二月份为1,以此类推,十二月份为11。get方法返回的值也遵照此常量值。

时间    Sat Dec 01 10:43:17 CST 2012

       System.out.println(ca.get(Calendar.MONTH));  =====》 打印11
       System.out.println(ca.get(Calendar.DAY_OF_WEEK)); =====》 打印7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值