为什么传递给GregorianCalendar(int year,int month,int day)构造函数的参数会产生“整数过大”错误? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么传递给GregorianCalendar(int year,int month,int day)构造函数的参数会产生“整数过大”错误? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我写了一个程序来返回任何给定日期的日期。

但是在用于实例化cale7和cale8对象的行中,正在生成“整数号太大”错误。其他日期传递给构造函数实例化cale(1/2/3/4/5/6/9/10/11)并非如此。

我一直在考虑这个问题一段时间了,但是我无法想出为什么错误仅针对两种情况而不是针对其他情况产生的原因。任何线索都会有所帮助。

这是我的代码 - >

class Gc{
public static void main(String[] args){
    out.println("yyyy/mm/dd");
    Scanner inp=new Scanner(in);
    int year=inp.nextInt();
    int mm=inp.nextInt();
    int dd=inp.nextInt();
    out.println(m1(year,mm,dd));
}
public static String m1(int year,int mm,int dd){
    try{
    if((mm>12)||(mm<1)||(dd>31)||(dd<1)||(year<2000)||(year>3000)){
        System.exit(0);
    }
    if(((mm==4)||(mm==6)||(mm==9)||(mm==11))&&(dd==31)){
        System.exit(0);
    }
    if((mm==2)&&(dd>29)){
        System.exit(0);
    }
    if(((year%4)!=0)&&(mm==2)&&(dd==29)){
        System.exit(0);
    }
    if(((year%4)==0)&&((year%400)!=0)&&(dd==29)){
        System.exit(0);
    }
    }
    catch(Exception e){}

GregorianCalendar cale=new GregorianCalendar(2015,01,01);
System.out.println(cale.get(GregorianCalendar.MONTH));
System.out.println(cale.getTime()); 

GregorianCalendar cale1=new GregorianCalendar(2015,02,01);
System.out.println(cale1.get(GregorianCalendar.MONTH));

GregorianCalendar cale2=new GregorianCalendar(2015,03,01);
System.out.println(cale2.get(GregorianCalendar.MONTH));

GregorianCalendar cale3=new GregorianCalendar(2015,04,01);
System.out.println(cale3.get(GregorianCalendar.MONTH));

GregorianCalendar cale4=new GregorianCalendar(2015,05,01);
System.out.println(cale4.get(GregorianCalendar.MONTH));

GregorianCalendar cale5=new GregorianCalendar(2015,06,01);
System.out.println(cale5.get(GregorianCalendar.MONTH));

GregorianCalendar cale6=new GregorianCalendar(2015,07,01);
System.out.println(cale6.get(GregorianCalendar.MONTH));

GregorianCalendar cale7=new GregorianCalendar(2015,08,01);
System.out.println(cale7.get(GregorianCalendar.MONTH));

GregorianCalendar cale8=new GregorianCalendar(2015,09,01);
System.out.println(cale8.get(GregorianCalendar.MONTH));


GregorianCalendar cale9=new GregorianCalendar(2015,10,01);
System.out.println(cale9.get(GregorianCalendar.MONTH));

GregorianCalendar cale10=new GregorianCalendar(2015,11,01);
System.out.println(cale10.get(GregorianCalendar.MONTH));

GregorianCalendar cale11=new GregorianCalendar(2015,12,01);
System.out.println(cale11.get(GregorianCalendar.MONTH));

GregorianCalendar cal=new GregorianCalendar(year,mm,dd);
System.out.println(cal.getTime());
System.out.println(cal.get(GregorianCalendar.MONTH));
switch(cal.get(GregorianCalendar.DAY_OF_WEEK)){
    case 1:
    return "SUNDAY";
    case 2:
    return "MONDAY";
    case 3:
    return "TUESDAY";
    case 4:
    return "WEDNESDAY";
    case 5:
    return "THURSDAY";
    case 6:
    return "FRIDAY";
    case 7:
    return "SATURDAY";
    default:
    return "NONE";
}
}

}

答案

在java中,以0开头的数字是八进制的。所以,'010'实际上是8号。

08不是有效的八进制数(八进制数从07到010)。只需写'8'而不是'08'。

作为一个单独的问题,GregorianCalendar是过时的API。不要用它;请改用java.time包。如果你(不知何故)还在java 1.7或更低版​​本上,那么JSR-310 backport将这个包添加到你的java中。如果你是1.8或者它是核心java的一部分。

以上是关于为什么传递给GregorianCalendar(int year,int month,int day)构造函数的参数会产生“整数过大”错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 array[i].charAt(0).toUpperCase() 不会传递给 array[i][0] [重复]

java 中GregorianCalendar类跟Calendar类有啥本质的区别,以及都怎么用

在这种情况下,“将结果传递给参数”是什么意思?

Calendar类与GregorianCalendar类

Java:GregorianCalendar 的最大值和最小值是啥/在哪里?

日期操作类--GregorianCalendar类