Java中Calendar跨年的坑

上代码:

    public static void main(String[] args) throws Exception{
    
    

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.roll(Calendar.MONTH, -5);

        String date = simpleDateFormat.format(calendar.getTime());

        System.out.println("-------------" + date + "-------------");
    }

运行结果

-------------2021-03-------------

可以看到,减去5个月得到的日期是没有问题的,但是减去超过一年时就有问题了,再试试减20个月

    public static void main(String[] args) throws Exception{
    
    

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.roll(Calendar.MONTH, -20);

        String date = simpleDateFormat.format(calendar.getTime());
        
        System.out.println("-------------" + date + "-------------");
    }

运行结果

-------------2021-12-------------

日期不对了,正确日期应该是:2019-12

解决办法:将roll方法换成add,roll方法只能在当前年进行计算,add方法可以进行跨年计算

    public static void main(String[] args) throws Exception {
    
    

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.add(Calendar.MONTH, -20);

        String date = simpleDateFormat.format(calendar.getTime());

        System.out.println("-------------" + date + "-------------");
    }

运行结果

-------------2019-12-------------

猜你喜欢

转载自blog.csdn.net/qq_39486119/article/details/119653514