In J2ME, in quanto non si dispone di Calendar.getActualMaximum()
disponibili, si potrebbe provare qualcosa di simile a quanto segue: utilizzando il calculation from this answer, è possibile calcolare il numero di giorni tra il 1 ° giorno del mese a cui sei interessato e il primo giorno del mese successivo.
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));
}
Nota che questo metodo richiede mesi come Calendar
costanti, come Calendar.JANUARY
. Penso che la rappresentazione intera di questi sia uguale a 0, quindi se passi a per dicembre, i risultati potrebbero essere errati. Inoltre, non ho verificato problemi relativi all'ora legale, quindi dovrai verificare che questo sia sufficiente per le esigenze della tua app.
utilizzare la funzione precedente in questo modo:
int d = getDaysInMonth(Calendar.DECEMBER, 2012);
d = getDaysInMonth(Calendar.FEBRUARY, 2012);
d = getDaysInMonth(Calendar.FEBRUARY, 2013);
che produrrà d =
31
29
28
(per i fusi orari statunitensi).
@Pma Qualche fortuna o domande? –
Il metodo 'getActualMaximum' è riferito da Java SE api docs (' http://docs.oracle.com/javase/1.5.0/docs/api/java/blah blah'). Java SE è una piattaforma diversa da Java Me e ME API è molto limitata rispetto a SE – gnat