In J2ME, da Sie nicht über Calendar.getActualMaximum()
verfügbar, könnten Sie so etwas wie die versuchen folgende: mit dem calculation from this answer, können Sie die Anzahl der Tage zwischen dem ersten Tag berechnen des Monats, an dem Sie interessiert sind, und der 1. Tag des nächsten Monats.
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));
}
Beachten Sie, dass diese Methode Monate als Calendar
Konstanten nimmt, wie Calendar.JANUARY
. Ich denke, die rohe Integer-Darstellung dieser ist 0-indiziert, wenn Sie also 12
für Dezember übergeben, können die Ergebnisse falsch sein. Ich habe auch keine Probleme mit der Sommerzeit getestet. Sie müssen also sicherstellen, dass dies für die Anforderungen Ihrer App ausreicht.
Über die obige Funktion wie folgt:
int d = getDaysInMonth(Calendar.DECEMBER, 2012);
d = getDaysInMonth(Calendar.FEBRUARY, 2012);
d = getDaysInMonth(Calendar.FEBRUARY, 2013);
die Ausbeute wird d =
31
29
28
(für US-Zeitzonen).
@Pma Irgendwelches Glück oder Fragen? –
"getActualMaximum" -Methode ist von Java SE API-Dokumenten verwiesen ('http://docs.oracle.com/javase/1.5.0/docs/api/java/blah blah'). Java SE ist eine andere Plattform als Java Me und ME API ist sehr begrenzt im Vergleich zu SE – gnat