Voici le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
GregorianCalendar gc = new GregorianCalendar(2007, Calendar.MARCH,1);
 
// Je veux me positionner au dernier jour du mois précédent.
gc.add(GregorianCalendar.DAY_OF_YEAR, -1);
 
System.out.println(gc.getTime());
Ce code donne comme résultat :
Mar 01 00:00:00 CET 2007

Etant donné que que GregorianCalendar gère directement des erreurs connues telles qu'un jour du mois invalide par rapport au calendrier Grégorien, je comprends que ma soustraction de 1 jour au 01/03/08 me donne le jour 29/02/2007 qui n'est donc pas correct.

Je pensais que GregorianCalendar réalisait la gestion des années bissextiles

J'ai donc formulé le code suivant pour obtenir un résultat correct.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
GregorianCalendar gc = new GregorianCalendar(2007, Calendar.MARCH,1);
 
if((gc.get(GregorianCalendar.MONTH)==GregorianCalendar.MARCH) &&
       (!gc.isLeapYear(gc.get(GregorianCalendar.YEAR))))
     {
      gc.add(GregorianCalendar.DAY_OF_YEAR, -2);
     }else{
         gc.add(GregorianCalendar.DAY_OF_YEAR, -1); 
     }
Ce code donne comme résultat :
Fev 28 00:00:00 CET 2007

Avez-vous, pensez-vous à une autre idée, concernant cette gestion d'année bissextile?

Merci