Ho appena incontrato uno strano comportamento con la classe GregorianCalendar e mi chiedevo se stavo davvero facendo qualcosa di male.Strano comportamento con GregorianCalendar
Questo si aggiunge solo quando il mese della data di inizializzazione ha un massimo effettivo massimo del mese in cui imposterò il calendario.
Ecco il codice di esempio:
// today is 2010/05/31
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.MONTH, 1); // FEBRUARY
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
return cal.getTime(); // => 2010/03/03, wtf
So che il problema è causato dal fatto che la data di inizializzazione del calendario è un mese 31 giorni (maggio), che scherza con il mese impostato a febbraio (28 giorni). La soluzione è semplice (basta impostare day_of_month su 1 prima di impostare l'anno e il mese), ma mi chiedevo se questo fosse davvero il comportamento desiderato. Qualche idea ?
Questo funziona. Grazie!! –