Je viens de rencontrer un comportement étrange avec la classe GregorianCalendar, et je me demandais si je faisais vraiment quelque chose de mal. Ceci ne s'applique que lorsque le mois de la date d'initialisation est réellement supérieur au mois auquel je vais configurer le calendrier.Comportement étrange avec GregorianCalendar
Voici l'exemple de code:
// 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
Je sais que le problème est causé par le fait que la date d'initialisation du calendrier est un mois de 31 jours (mai), qui mess avec le mois fixé à février (28 journées). Le correctif est facile (il suffit de mettre day_of_month à 1 avant de régler l'année et le mois), mais je me demandais si c'était vraiment le comportement désiré. Des pensées ?
Cela fonctionne. Merci!! –