Hello à tous,

je cherchais à faire quelques opérations sur des dates et je faisais quelques tests avec la classe Calendar pour comprendre son fonctionnement et notamment le fonctionnement de la méthode "set".

Problème: après mes tests, il y a un truc que je n'ai pas compris

Exemple simple : j'imaginais pouvoir trouver le premier samedi du mois avec quelque chose comme ça.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class test_date {
 
    public static void main(String[] args) {
 
        Calendar c = Calendar.getInstance();
 
        DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
 
 
        c.set(Calendar.DAY_OF_MONTH, 1); //premier jour du mois
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); // > samedi
 
        System.out.println(df.format(c.getTime()));
    }
}
Mais ça ne marche pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
D:\temp>java test_date
sam. 01/12/2012
En fait, cela fait comme si le premier set(Calendar.DAY_OF_MONTH, 1) n'était pas pris en compte.

Du coup, pour essayer de comprendre, j'ai ajouté une étape :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class test_date {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();

        DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
    	

        c.set(Calendar.DAY_OF_MONTH, 1); //premier jour du mois
        System.out.println(df.format(c.getTime()));
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); // > samedi

        System.out.println(df.format(c.getTime()));
    }
}
Et là, cela fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
D:\temp>java test_date
jeu. 01/11/2012
sam. 03/11/2012
Du coup, je me demande s'il n'y aurait pas un "truc" qui ferait que lorsqu'on utilise la méthode set, il faut d'une certaine manière forcer un recalcule pour que les autres champs se mettent à jour ? Mais je n'ai rien vu dans ce sens dans la doc ?

Une piste svp ?

Merci d'avance !

Alexis