java calendar

 1. add() 与 roll() 的区别

    add() 的功能非常强大,add 可以对 Calendar 的字段进行计算。如果需要减去值,那么使用负数值就可以了,如 add(field, -value)。

    add() 有两条规则

    当被修改的字段超出它可以的范围时,那么比它大的字段会自动修正。如:
    Calendar cal1 = Calendar.getInstance();
    cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
    cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1,对吗?
    System.out.println(cal1.getTime()); //结果是 2000-9-30

    另一个规则是,如果比它小的字段是不可变的(由 Calendar 的实现类决定),那么该小字段会修正到变化最小的值。

    以上面的例子,9-31 就会变成 9-30,因为变化最小。

    Roll() 的规则只有一条:
    当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。如:

    Calendar cal1 = Calendar.getInstance();
    cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日
    cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 周二
    cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日
    cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 周日
    WEEK_OF_MONTH 比 MONTH 字段小,所以 roll 不能修正 MONTH 字段。

2.DAY_OF_WEEK_IN_MONTH

public static final int DAY_OF_WEEK_IN_MONTH
get 和  set 的字段数字,指示当前月中的第几个星期。与  DAY_OF_WEEK 字段一起使用时,就可以惟一地指定某月中的某一天。与  WEEK_OF_MONTH 和  WEEK_OF_YEAR 不同,该字段的值并  取决于  getFirstDayOfWeek() 或  getMinimalDaysInFirstWeek()DAY_OF_MONTH 1 到  7 总是对应于  DAY_OF_WEEK_IN_MONTH 18 到  14 总是对应于  DAY_OF_WEEK_IN_MONTH 2,依此类推。 DAY_OF_WEEK_IN_MONTH 0 表示  DAY_OF_WEEK_IN_MONTH 1 之前的那个星期。负值是从一个月的末尾开始反向计数,因此,一个月的最后一个星期天被指定为 DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1。因为负值是反向计数的,所以它们在月份中的对齐方式通常与正值的不同。例如,如果一个月有 31 天,那么 DAY_OF_WEEK_IN_MONTH -1 将与  DAY_OF_WEEK_IN_MONTH 5 和  DAY_OF_WEEK_IN_MONTH 4 的末尾相重叠。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值