特定年份的某个月中的天数不起作用

Jun*_*aid 2 java date java-8

注意:Donot标记它重复,我知道它是重复的问题,但我没有得到它的帮助.

我想计算特定年份的一个月中的天数.我看了这个,但它不能正常工作.我试过跟随

public class NumOfDays {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.print("Enter month: ");
        int month = input.nextInt();
        System.out.print("Enter year: ");
        int year = input.nextInt();

        Calendar mycal = new GregorianCalendar(year, month, 1);

        System.out.println("Number of days are: " + mycal.getActualMaximum(Calendar.DAY_OF_MONTH));

    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制台是

Enter month: 2
Enter year: 2000
Number of days are: 31 /// Wrong
Run Code Online (Sandbox Code Playgroud)

Enter month: 10
Enter year: 1999
Number of days are: 30 // Correct
Run Code Online (Sandbox Code Playgroud)

我知道还有另外一种方法,即手动计算,但我想像上面那样做.如果我做错了,请告诉我.

PS:我正在使用JAVA-8.

ass*_*ias 10

由于您使用的是Java 8,我建议使用新的日期/时间API,java.time,特别是它的YearMonth类:

YearMonth ym = YearMonth.of(2000, 2);
System.out.println(ym.lengthOfMonth()); //29 as expected
Run Code Online (Sandbox Code Playgroud)

  • 甚至比我的好 (2认同)

JP *_*mau 7

2000年3月不是31天吗?正如文档所述,月份为零(http://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html#GregorianCalendar-int-int-int-)

编辑:我很蠢,我以为你有一个月的天数.你需要使用getActualMaximum,而不是get.(http://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html#getActualMaximum-int-)