java 日历类 Calendar方法

常用访问、修改日期时间的方法:
      void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
      void get(int field):返回指定日历的字段
      void getActualMaximum(int field):返回指定日历字段可能拥有的最大值。例如月,最大值为11
      void getActualMinimum(int field):返回指定日历字段可能拥有的最小值。例如月,最小值为0
      void roll(int field,int amount): 与add()方法类似,区别在于加上amount后超过了该字段所能表示的最大范围,也不会向上一个字段进位
      void set(int field,int value):将给定的日历字段设置为给定值
      void set(int year,int month,int date):设置Calendar对象的年、月、日3个字段
      void set(int year,int month,int date,int hourOfDay,int minute,int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值
      各方法中的field为日期中的year、month、date、hourOfDay、minute、second的变量。

Calendar的方法示例:
            import java.util.*;
            import static java.util.Calendar.*;
            public class CalendarTest
          {
            public static void main(String[] args)
                {
                  Calendar c = Calendar.getInstance();
                // 取出年
                    System.out.println(c.get(YEAR));
                    // 取出月份
                    System.out.println(c.get(MONTH));
                    // 取出日
                    System.out.println(c.get(DATE));
                    // 分别设置年、月、日、小时、分钟、秒
                c.set(2003 , 10 , 23 , 12, 32, 23); //2003-11-23 12:32:23
                    System.out.println(c.getTime());
                    // 将Calendar的年前推1年
                c.add(YEAR , -1); //2002-11-23 12:32:23
                  System.out.println(c.getTime());
                    // 将Calendar的月前推8个月
                    c.roll(MONTH , -8); //2002-03-23 12:32:23
              System.out.println(c.getTime());
                }
            }
 
add和roll方法的区别
      当被修改的字段超出它允许的范围时,会发生进位,即上一级字段也会增大。
              Calendar call=Calendar,getInstance();
              call.set(2003,7,23,0,0,0);  //2003-8-23
              call.add(Month,6);  //2003-8-23 => 2004-2-23
    8月份加上6个月会使月成为13,则年会进一位

      如果下一级字段也需要改变,那么该字段会修正到变化最小的值。
            Calendar call=Calendar,getInstance();
              call.set(2003,7,31,0,0,0);  //2003-8-31
              call.add(Month,6);  //2003-8-23 => 2004-2-29
      8月份加上6个月会使月份成为13,则年会进一位.此时月份会相应的变为2,但是日期31在2月不符合规则,add方法会使31变为29,同为2月的最后一天。

      对于roll方法的处理规则:
                Calendar call=Calendar,getInstance();
              call.set(2003,7,23,0,0,0);  //2003-8-23
              call.add(Month,6);  //2003-8-23 => 2003-2-23
        当修改字段超出允许的范围,上一级不会增大。

        roll方法下一字段的处理规则与add相同

set方法的延迟修改
    set(f,value)在将f更改为value时,尽管f会立即改变,但是Calendar所代表的时间不会立即改变,直到下次调用 get()、getTime()、add()、roll().....时才会重新计算。这样做的优势是当set方法多次调用时,不会触发多次不必要的计算。
    例如:
    import java.util.*;
    import static java.util.Calendar.*;

    public class LazyTest
    {
        public static void main(String[] args)
            {
              Calendar cal = Calendar.getInstance();
              cal.set(2003 , 7 , 31);  //2003-8-31
              // 将月份设为9,但9月31日不存在。
                  // 如果立即修改,系统将会把cal自动调整到10月1日。
                  cal.set(MONTH , 8);
                  //下面代码输出10月1日
                  //System.out.println(cal.getTime());      //①
                  //设置DATE字段为5
                  cal.set(DATE , 5);      //②
                  System.out.println(cal.getTime());      //③
            }
    }
    在上述程序中,如果System.out.println(cal.getTime());不被屏蔽,则会输出2003-10-1和2003-10-5. 当System.out.println(cal.getTime());被屏蔽,则将month值的内部变量设为8实际为9月份,然后再将DATE设为5,此时如果输出则为2003-9-5

      参考资料:疯狂java讲义
              java编程思想
              马皓等.java语言程序设计.北京:清华大学出版社 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值