C'est normal, et cela vient du fait que le champ MONTH accepte les valeurs allant de 0 (pour janvier) à 11 (pour décembre).
Va voir le lien ci-dessous qui le décrit clairement : http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#MONTH
J'ai un petit exemple vite fait qui part de la date courante (04/08/2004 pour le 4 août 2004 !!) et bascule en 2005, puis en 2003.
GregorianCalendar c = new GregorianCalendar(2004,7,4); // 04/08/2004 !!!!!!
System.out.println("Date initiale : "+String.valueOf(c.get(5))+"/"+String.valueOf(c.get(2))+"/"+String.valueOf(c.get(1)));
c.add(6,150) ; // On ajoute 150 jours ==> passage 01/01/2005.
System.out.println("Date initiale + 150 j : "+String.valueOf(c.get(5))+"/"+String.valueOf(c.get(2))+"/"+String.valueOf(c.get(1)));
c.add(6,-150); // On retire 150 jours ==> retour 04/08/2004.
System.out.println("Date modifiée - 150 j : "+String.valueOf(c.get(5))+"/"+String.valueOf(c.get(2))+"/"+String.valueOf(c.get(1)));
c.add(6,-217); // On retire 217 jours ==> passage 31/12/2003 System.out.println("Date initiale - 217 j : "+String.valueOf(c.get(5))+"/"+String.valueOf(c.get(2))+"/"+String.valueOf(c.get(1)));
J'espère que ça répond à ta question. Gsx
|