2013-02-10 26 views
5

Java ME java.util.Calendar classe non ha il metodo getActualMaximum():Java ME - come ottenere il numero di giorni nell'ultimo mese

... Questa classe è stata sottoinsieme per J2ME in base alla classe Calendar JDK 1.3. Molti metodi e variabili sono stati eliminati e altri metodi sono stati semplificati, nel tentativo di ridurre le dimensioni di questa classe.

È persino possibile ottenere il numero di giorni nel mese?

risposta

2

Ho capito che funziona utilizzando la risposta seguente. Ma grazie a Nate per aver dato un esempio funzionante.

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); 
} 

Sembra essere il più breve e sembra anche funzionare bene. Qualche commento?

-1

Utilizzare il metodo getActualMaximum su Calendar

Restituisce il valore massimo che il campo calendario specificato potrebbe avere, dato il valore del tempo di questo calendario. Ad esempio, il valore massimo effettivo del campo MONTH di è 12 in alcuni anni e 13 in altri anni nel sistema di calendario ebraico.

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); 
+0

@Pma Qualche fortuna o domande? –

+1

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

3

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).

+0

Penso di aver trovato una versione più breve del tuo metodo (vedi il mio aggiornamento), ma è stata la prima risposta che ha usato l'API di Java. – Pma

+0

@Pma, sì, la tua risposta sembra più pulita. Un commento, però. C'è un difetto logico, che probabilmente in realtà non ti ferisce. Se chiedete il numero di giorni a dicembre 2012, ad esempio, vi darà il numero di giorni nel dicembre 2011. Probabilmente non potrà mai fallire, poiché dicembre non è un mese che cambia il numero di giorni ... I ho pensato di dirlo Puoi considerare che un'ottimizzazione :) – Nate

Problemi correlati