Calendar的运用

Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个
Calendar 对象,其日历字段已由当前日期和时间初始化:
Calendar now = Calendar.getInstance();

它有三种方法改变当前日期字段:
set()、add() 和 roll()
1.set()方法讲解
set(f, value) 将日历字段 f 更改为 value。
例子:

Calendar begin = Calendar.getInstance();
        //毫秒Calendar.YEAR
        begin.set(Calendar.MILLISECOND, 0);
        //年
        begin.set(Calendar.YEAR, 0);
        //月
        begin.set(Calendar.MONTH, 0);
       //日
        begin.set(Calendar.DAY_OF_MONTH, 0);
        //小时
        begin.set(Calendar.HOUR_OF_DAY, 0);
        //分钟
        begin.set(Calendar.MINUTE, 0);//begin.add(Calendar.DAY_OF_MONTH,1);
        //秒
        begin.set(Calendar.SECOND, 0);

2.Calendar的add()方法
add(f, delta) 将 delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta)
Calendar有两大规则:
规则 1:(调用后 f 的值)-(调用前 f 的值)= delta,以字段 f 中发生的任何溢出为模(将8月三十日加一个月为9月31,但9月为30天,那么一天就为溢出)。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。

规则 2:如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的(8月31天,9月30天),因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。

示例:假定 GregorianCalendar 最初被设置为 2000 年 8 月 31 日。调用 add(Calendar.MONTH, 13) 将日历设置为 2001 年 9 月 30 日。Add 规则 1 将 MONTH 字段设置为 September,因为向 August 添加 13 个月得出的就是下一年的 September。因为在 GregorianCalendar 中,DAY_OF_MONTH 不可能是 9 月 31 日,所以 add 规则 2 将 DAY_OF_MONTH 设置为 30,即最可能的值。尽管它是一个更小的字段,但不能根据规则 2 调整 DAY_OF_WEEK,因为在 GregorianCalendar 中的月份发生变化时,该值也需要发生变化。

例子:

  // 加1年
        c.add(Calendar.YEAR, 1);

        // 减1个月
        c.add(Calendar.MONTH, -1);

        // 加1天
        c.add(Calendar.DATE, 1);

3.Calendar的Rool()方法
roll(f, delta) 将 delta 添加到 f 字段中,但不更改更大的字段。这等同于调用 add(f, delta)
有一个特定规则:
在完成调用后,更大的字段无变化。更大的字段表示一个更大的时间单元。DAY_OF_MONTH 是一个比 HOUR 大的字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值