Calendar日期类的Set方法与Add方法的区别,有坑!

1. Claendar

这是JDK提供给我们对日期操作的一个类,我们常用它来进行日期的基本操作。我是使用newInstence()方法来获得实例对象。

Calendar calendar = Calendar.getInstance();
2.设置日期的操作

通常设置日期会使用 SetAdd这两个方法。

Set方法

set(你想设置的域,你想设置的值);比如下面的方法 我想10天之后的date。这是重新赋值

  @Test
    public void test2(){
        //获得当前月的 10天后
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+10);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
    }
Add方法

add(你想增加的域,想增加的值);同样是获取当前时间 10天后的date。这是在原来的基础上 ,加上值

   @Test
    public void test3(){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH,10);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));

    }

上述两种方法的执行结果相同。但是这两个方法在处理的方式上也存在

3.踏坑

例如:当前日期为 2020-03-31日 我们把该月份 设置成 4 获得下月月末 日期 那么会发生什么? 结果会变成 04-31

注意:日期的 起始是从0 开始

    @Test
    public void test4(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(2020,2,31);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
        calendar.add(Calendar.MONTH,1);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
    }

    @Test
    public void test5(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(2020,2,31);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
        calendar.set(Calendar.MONTH,calendar.get(Calendar.MONTH)+1);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
    }

执行结果:
Add方法

2020-03-31 12:43:42
2020-04-30 12:43:42

Set方法

2020-03-31 12:44:55
2020-05-01 12:44:55

因为 03-31 月份加 1 之后 会变成 04-31 但是我们发现:Add方法会只会设置到月末;而Set方法会自动顺延为下一日也就是05-01

4.获得某月的最大日期
    public String testMaxMoth(int year ,int month){
        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.YEAR,year);
        instance.set(Calendar.MONTH,month-1);
        // 获得该月份日期号 的最大值
        int actualMaximum = instance.getActualMaximum(Calendar.DAY_OF_MONTH);
        instance.set(Calendar.DAY_OF_MONTH,actualMaximum);
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(instance.getTime());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值