Java ME java.util.CalendargetActualMaximum()
クラスには次のメソッドがありません。
...このクラスは、JDK 1.3 Calendar クラスに基づいて J2ME 用にサブセット化されています。このクラスのサイズを縮小するために、多くのメソッドと変数が削除され、他のメソッドが単純化されました。
月の日数を取得することさえ可能ですか?
Java ME java.util.CalendargetActualMaximum()
クラスには次のメソッドがありません。
...このクラスは、JDK 1.3 Calendar クラスに基づいて J2ME 用にサブセット化されています。このクラスのサイズを縮小するために、多くのメソッドと変数が削除され、他のメソッドが単純化されました。
月の日数を取得することさえ可能ですか?
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 だと思うので、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
この 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);