如何使用Java Calendar获取特定月份的天数?

Jer*_*lle 3 java calendar

我正在创建一个简单的程序,允许用户查看他们设置的月份之间的天数.

例如从1月到3月

我可以使用这个获得当月的当天:

Calendar.DAY_OF_MONTH
Run Code Online (Sandbox Code Playgroud)

我想要的是如何在一个月内提供价值?

我有这个简单的代码:

public static void machineProblemTwo(int startMonth, int endMonth) {

        int[] month = new int[0];
        int date = 2015;

        for(int x = startMonth; x <= endMonth; x++) {
           System.out.println(x + " : " + getMaxDaysInMonth(x,date));
        }

    }

public static int getMaxDaysInMonth(int month, int year){

        Calendar cal = Calendar.getInstance();
        int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // how can I supply the month here?

        return days;

    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?你能帮帮我吗?

Jon*_*eet 8

您需要设置日历要求最大值之前在年份和月份,例如用

cal.set(year, month, 1);
Run Code Online (Sandbox Code Playgroud)

(或者按照David的回答使用日历构造函数.)

所以:

public static int getMaxDaysInMonth(int month, int year) {
    Calendar cal = Calendar.getInstance();
    // Note: 0-based months
    cal.set(year, month, 1);
    return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
Run Code Online (Sandbox Code Playgroud)

或者 - 并且最好 - 使用Joda Time或Java 8:

// Java 8: 1-based months
return new LocalDate(year, month, 1).lengthOfMonth();

// Joda Time: 1-based months
return new LocalDate(year, month, 1).dayOfMonth().getMaximumValue();
Run Code Online (Sandbox Code Playgroud)

(我确定Joda Time必须有一个更简单的选项,但我还没有找到它...)


Daw*_*ica 6

使用构造函数来GregorianCalendar传递年,月和日的位置.不要忘记月份从0到11(1月份为0,12月份为11月份).

public static int numberOfDaysInMonth(int month, int year) {
    Calendar monthStart = new GregorianCalendar(year, month, 1);
    return monthStart.getActualMaximum(Calendar.DAY_OF_MONTH);
}
Run Code Online (Sandbox Code Playgroud)