5

Java ME java.util.Calendar类没有该getActualMaximum()方法:

...这个类是基于 JDK 1.3 Calendar 类的 J2ME 的子集。许多方法和变量已被修剪,并简化了其他方法,以减少此类的大小。

甚至可以得到一个月的天数吗?

4

3 回答 3

3

在 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

(对于美国时区)。

于 2013-02-11T23:02:25.393 回答
2

我使用下面的答案让它工作。但感谢 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);
}

它似乎是最短的,而且似乎工作正常。任何意见?

于 2013-02-20T23:08:37.593 回答
-1

使用getActualMaximum方法Calendar

在给定此日历的时间值的情况下,返回指定日历字段可以具有的最大值。例如,MONTH 字段的实际最大值在某些年份为 12,而在希伯来日历系统中其他年份为 13。

来自 RoseIndia 的示例

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);
于 2013-02-10T21:28:21.347 回答