Java ME - 如何获得月中的天数

时间:2013-02-10 21:21:03

标签: java-me calendar

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

  

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

甚至可以获得月内的天数吗?

3 个答案:

答案 0 :(得分:3)

在J2ME中,由于您没有Calendar.getActualMaximum()可用,您可以尝试以下内容:使用calculation from this answer,您可以计算一月中第一天之间的天数对此感兴趣,以及下个月的第一天。

   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

(美国时区)。

答案 1 :(得分: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);
}

它似乎是最短的,似乎也很好。有什么意见吗?

答案 2 :(得分:-1)

使用Calendar

上的getActualMaximum方法
  

返回指定日历字段可以的最大值   鉴于此日历的时间价值。例如,实际的   MONTH字段的最大值在某些年份为12,在其他年份为13   在希伯来日历系统中的几年。

Example from 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);