您的位置:首页 > 编程语言 > Go语言

GregorianCalendar类的add和roll方法

2014-06-18 11:18 99 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: