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
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
相关文章推荐
- JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别
- Calendar类中add/set/roll方法的区别
- java Calendar roll 和add 方法的区别
- Calendar 类的 add() 和roll方法详解
- 从例子看List的add()方法的工作机制
- cacheAddMethod方法
- java.util.Runtime类中的addShutdownHook()方法
- 出现<add assembly="*"/>错误的解决方法:
- word to PD R qm add-in 运行时错误‘91’:未设置对象变量或 with block 变量 解决方法
- C#:ListBox的2个常用方法Add,Clear与Items的2个属性
- XsltArgumentList.AddExtensionObject 方法
- Select.add()在IE中的异常以及替代方法
- addShutdownHook()方法要点
- ExternalInterface.addCallback()方法,as2 和 as3的区别
- SqlCommand类的Parameters的Add方法及参数赋值
- ExternalInterface.addCallback()方法,as2 和 as3的区别
- addShutdownHook()方法简单介绍
- Cache类中的Add 和 Insert 方法有什么区别
- Cache.Add 方法
- Arrays.asList方法返回的List不能执行add、remove操作