我正在创建一个简单的程序,允许用户查看他们设置的月份之间的天数.
例如从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)
我怎样才能做到这一点?你能帮帮我吗?
您需要设置日历是要求最大值之前在年份和月份,例如用
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必须有一个更简单的选项,但我还没有找到它...)
使用构造函数来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)
归档时间: |
|
查看次数: |
8155 次 |
最近记录: |