Java ME java.util.Calendar类没有该getActualMaximum()
方法:
...这个类是基于 JDK 1.3 Calendar 类的 J2ME 的子集。许多方法和变量已被修剪,并简化了其他方法,以减少此类的大小。
甚至可以得到一个月的天数吗?
Java ME java.util.Calendar类没有该getActualMaximum()
方法:
...这个类是基于 JDK 1.3 Calendar 类的 J2ME 的子集。许多方法和变量已被修剪,并简化了其他方法,以减少此类的大小。
甚至可以得到一个月的天数吗?
在 J2ME 中,由于您没有Calendar.getActualMaximum()
可用的,您可以尝试以下操作:使用来自此答案的计算,您可以计算您感兴趣的月份的第一天和第一天之间的天数下个月的。
private int getDaysInMonth(int month, int year) {
Calendar cal = Calendar.getInstance(); // or pick another time zone if necessary
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, 1); // 1st day of month
cal.set(Calendar.YEAR, year);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
Date startDate = cal.getTime();
int nextMonth = (month == Calendar.DECEMBER) ? Calendar.JANUARY : month + 1;
cal.set(Calendar.MONTH, nextMonth);
if (month == Calendar.DECEMBER) {
cal.set(Calendar.YEAR, year + 1);
}
Date endDate = cal.getTime();
// get the number of days by measuring the time between the first of this
// month, and the first of next month
return (int)((endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000));
}
请注意,此方法需要几个月作为Calendar
常量,例如Calendar.JANUARY
. 我认为这些的原始整数表示是 0-indexed,所以如果你通过12
了 12 月,结果可能是错误的。我还没有测试过夏令时问题,因此您必须验证这是否足以满足您的应用程序的需求。
像这样使用上面的函数:
int d = getDaysInMonth(Calendar.DECEMBER, 2012);
d = getDaysInMonth(Calendar.FEBRUARY, 2012);
d = getDaysInMonth(Calendar.FEBRUARY, 2013);
这将产生 d =
31
29
28
(对于美国时区)。
我使用下面的答案让它工作。但感谢 Nate 提供了一个工作示例。
public static int getMaxDaysInMonth(int month, int year){
Calendar cal=Calendar.getInstance();
cal.set(Calendar.DATE, 1);
cal.set(Calendar.MONTH, month+1);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.DATE, cal.get(Calendar.DATE)-1);
return cal.get(Calendar.DATE);
}
它似乎是最短的,而且似乎工作正常。任何意见?
使用getActualMaximum方法Calendar
在给定此日历的时间值的情况下,返回指定日历字段可以具有的最大值。例如,MONTH 字段的实际最大值在某些年份为 12,而在希伯来日历系统中其他年份为 13。
Calendar calendar = Calendar.getInstance();
int year = 2008;
int month = Calendar.FEBRUARY;
int date = 1;
calendar.set(year, month, date);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("Number of Days: " + days);