Originariamente inviato da Ironmax
Volevo capire una cosa. La classe GregorianCalendar tiene conto degli anni bisestili oppure conta tutti i mesi dell'anno con 31 giorni?
La gestione degli anni bisestili è corretta in GregorianCalendar così come è corretto il calcolo del numero di giorni nei vari mesi.
codice:
GregorianCalendar c = new GregorianCalendar(2012, Calendar.FEBRUARY, 28); // 28 Febbraio 2012
System.out.println(c.getTime());
c.add(Calendar.DAY_OF_MONTH, 1); // +1 giorno
System.out.println(c.getTime());
c.add(Calendar.DAY_OF_MONTH, 1); // +1 giorno
System.out.println(c.getTime());
L'output è:
codice:
Tue Feb 28 00:00:00 CET 2012
Wed Feb 29 00:00:00 CET 2012
Thu Mar 01 00:00:00 CET 2012
Oppure ad esempio:
codice:
for (int m = Calendar.JANUARY; m <= Calendar.DECEMBER; m++) {
GregorianCalendar c = new GregorianCalendar(2012, m, 1);
System.out.println("Mese " + (m+1) + " n.giorni=" + c.getActualMaximum(Calendar.DAY_OF_MONTH));
}
L'output è:
codice:
Mese 1 n.giorni=31
Mese 2 n.giorni=29
Mese 3 n.giorni=31
Mese 4 n.giorni=30
Mese 5 n.giorni=31
Mese 6 n.giorni=30
Mese 7 n.giorni=31
Mese 8 n.giorni=31
Mese 9 n.giorni=30
Mese 10 n.giorni=31
Mese 11 n.giorni=30
Mese 12 n.giorni=31
Quindi come si può vedere è tutto assolutamente corretto!
P.S. Le date sono stampate in formato fisso/inglese ma è per via del toString() di Date.