JAVA中用偏移 求闰年的疑惑

对于java中求一个闰年, 或许大家都很熟悉:  就是 判断这个年份能被4整除,并且不能被100整除,  或者是能被400整除 在这里直接上代码

    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个年份");
    int i = sc.nextInt();
    //for(int i = 0 ;i<10000;i++){ 

    if((i%4==0&&i%100!=0)||i%400==0){
    System.out.println(i+"是闰年");
    }else{
    System.out.println(i+"是平年");
    }
    //}

    这样可以很简单的求出一个闰年,  但是还有第二种方式: 只需要判断这个月的2月份有多少天, 如果是29天就是闰年, 如果是28天就是平年.  还是直接上代码

    Scanner sc = new Scanner(System.in);

    System.out.println("请输入一个年份");
    int year = sc.nextInt();
   
    Calendar c = Calendar.getInstance();
    . 设置输入年3月1日, set(int year, int month, int day);
    c.set(year, 2, 1);// 设置成3月1日 , 这里获取月份表示范围是[0,11]表示[1,12]月份
     将这个日历对象的中的天数,向前偏移一天,add(int field, int amount);
    c.add(Calendar.DAY_OF_MONTH, -1);  前面设置成了3月1日, 3月1日向前偏移一天就是2月的最后一天
     获取这个月的天数.get(int Field);
    int day = c.get(Calendar.DAY_OF_MONTH);
    if(day == 29){
    System.out.println(year + "年是闰年");
    }else{
    System.out.println(year + "年是平年");
    }

    到了这里就出现了问题  当年份为

              //100,200,300,500,600,700,900
    //1000,1100,1300,1400,1500,1700,1800,1900
    //2100,2200,2300,2500,2600,2700,2900
    //3000,3100,3300,3400,3500,3700,3800,3900
    //4100,4200,4300,4500,4600,4700,4900  ..................

    这些时 , 本应该是平年 ,  用偏移输出的却是闰年   也就可以理解成:上面年份的二月 在java时间中是29天. 很明显 ,这是错误的

    知错能改善莫大焉!  

原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/8136257.html