5

Java ME java.util.CalendargetActualMaximum()クラスには次のメソッドがありません。

...このクラスは、JDK 1.3 Calendar クラスに基づいて J2ME 用にサブセット化されています。このクラスのサイズを縮小するために、多くのメソッドと変数が削除され、他のメソッドが単純化されました。

月の日数を取得することさえ可能ですか?

4

3 に答える 3

3

J2ME では、Calendar.getActualMaximum()利用可能なものがないため、次のようなことを試すことができます:この回答の計算を使用して、関心のある月の 1 日から 1 日までの日数を計算できます。翌月の。

   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-index だと思うので、1212 月をパスすると結果が間違っている可能性があります。また、夏時間の問題もテストしていないため、これがアプリのニーズに十分であることを確認する必要があります。

上記の関数を次のように使用します。

  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

この 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 に答える