Java me javame-如何获取月天数

Java me javame-如何获取月天数,java-me,calendar,Java Me,Calendar,Java ME类没有getActualMaximum()方法: …该类是基于JDK 1.3日历类的J2ME的子集。许多方法和变量被删减,其他方法被简化,以减少此类的大小 甚至可以获得月天数吗?使用日历上的方法 返回指定的日历字段可以使用的最大值 已,给定此日历的时间值。例如,实际的 月份字段的最大值在某些年份为12,在其他年份为13 希伯来历法中的年 : 在J2ME中,由于您没有可用的Calendar.getActualMaximum(),因此可以尝试以下方法:使用,您可以计算感兴趣的月份的第一

Java ME类没有
getActualMaximum()
方法:

…该类是基于JDK 1.3日历类的J2ME的子集。许多方法和变量被删减,其他方法被简化,以减少此类的大小

甚至可以获得月天数吗?

使用
日历上的方法

返回指定的日历字段可以使用的最大值 已,给定此日历的时间值。例如,实际的 月份字段的最大值在某些年份为12,在其他年份为13 希伯来历法中的年

:


在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索引的,因此如果12月份通过
12
,结果可能是错误的。我还没有测试夏令时问题,所以您必须验证这是否足以满足应用程序的需要

按如下方式使用上述功能:

  int d = getDaysInMonth(Calendar.DECEMBER, 2012);
  d = getDaysInMonth(Calendar.FEBRUARY, 2012);
  d = getDaysInMonth(Calendar.FEBRUARY, 2013);
这将产生d=

31
29
28

(对于美国时区)。

我用下面的答案让它工作起来。 但感谢内特给出了一个有效的例子

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);
}

这似乎是最短的,也似乎工作良好。任何评论?

@Pma任何运气或问题?
getActualMaximum
方法来自Java SE api文档(
http://docs.oracle.com/javase/1.5.0/docs/api/java/blah 废话
)。Java SE与Java Me是一个不同的平台,与SEI相比,Me API有很大的局限性。我想我找到了您的方法的较短版本(请参阅我的更新),但这是第一个使用Java Me API的答案。@Pma,是的,您的答案似乎更清晰。不过有一条评论。有一个逻辑上的缺陷,可能实际上并没有伤害到你。例如,如果您询问2012年12月的天数,它会给出2011年12月的天数。这可能永远不会失败,因为十二月不是一个改变天数的月份。。。我只是想提一下。你可以考虑一个优化:
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);
}