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 大的字段。