Calendar et Juin / Juillet 2014
edilecachan
Messages postés
94
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Je travaille avec JAVA 6u18. Je sais ça date un peu.
Un truc m'a fait tourner en bourrique :
1) Le code
2) Le résultat :
Sat Jul 05 07:36:31 CEST 2014
Thu Jun 05 07:36:31 CEST 2014
31
Tue Jul 01 07:36:31 CEST 2014
Et oui, le dernier jour du mois de juin 2014 est le 1er juillet 2014.
Et, c'est normal puisque juin 2014 compte 31 jours ????????????
Le seul truc que j'ai trouvé est une horrible verrue dans le code du genre :
Si le résultat est un 1er juillet, alors, nous sommes le 30 juin.
A Bon Entendeur, toutes mes amitiés, il fallait que ça sorte,
Amitiés et cordialement, Henri
Je travaille avec JAVA 6u18. Je sais ça date un peu.
Un truc m'a fait tourner en bourrique :
1) Le code
Calendar cal = Calendar.getInstance(); cal.set(Calendar.MONTH, Calendar.JULY); cal.set(Calendar.DAY_OF_MONTH, 5); System.out.println(cal.getTime()); cal.add(Calendar.MONTH, -1); System.out.println(cal.getTime()); System.out.println(cal.getMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.DAY_OF_MONTH, cal.getMaximum(Calendar.DAY_OF_MONTH)); System.out.println(cal.getTime());
2) Le résultat :
Sat Jul 05 07:36:31 CEST 2014
Thu Jun 05 07:36:31 CEST 2014
31
Tue Jul 01 07:36:31 CEST 2014
Et oui, le dernier jour du mois de juin 2014 est le 1er juillet 2014.
Et, c'est normal puisque juin 2014 compte 31 jours ????????????
Le seul truc que j'ai trouvé est une horrible verrue dans le code du genre :
Si le résultat est un 1er juillet, alors, nous sommes le 30 juin.
A Bon Entendeur, toutes mes amitiés, il fallait que ça sorte,
Amitiés et cordialement, Henri
A voir également:
- Calendar et Juin / Juillet 2014
- Vidmate 2014 - Télécharger - TV & Vidéo
- Waptrick java football 2014 - Télécharger - Jeux vidéo
- Word 2014 - Télécharger - Traitement de texte
- 213.0.0.22.228 (11 juin 2024 windows) - Accueil - Windows
- Synchroniser google calendar et outlook - Guide
3 réponses
Bonjour,
Nan, mais, c'est quand même ma fôte ma très grande fôte !!!!!
C'est une erreur de méthode JAVA de la classe Calendar :
- getMaximum donne le nombre maximum de jour d'un mois possible dans une année du calendrier considéré (pour nous, c'est évidement 31 ... , mais, j'ai cru comprendre que Calendar gérait d'autres calendriers où ça ne serait pas le cas),
- dans mon cas, il faut utiliser getActualMaximum qui donne le nombre maximum de jour du mois de la date considérée (en gérant les années bissextiles pour le mois de février).
Du coup, je ne résiste pas à l'envie de vous donner une méthode qui vas vous permettre de calculer des dates d'échéance mensuelle en tenant compte de la notion de "dernier jour du mois".
Ex :
Votre client signe le 28 février 2015.
C'est le dernier jour du mois.
Dans la logique humaine, sa prochaine échéance est le 31 mars pas le 28 mars.
Il ne suffit donc pas de juste ajouter un mois ce qui rendrait cette date du 28 mars.
Il faut tenir compte du nombre de jour du mois de départ et du nombre de jour du mois d'arrivée.
C'est ce que fais cette méthode :
private Calendar AddMois (Calendar cal, int pas) {
Calendar cal_R = Calendar.getInstance ();
cal_R.setTime(cal.getTime());
boolean fin_de_mois = (cal.get(Calendar.DAY_OF_MONTH) == cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal_R.add(Calendar.MONTH, pas);
if (fin_de_mois) {
cal_R.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
}
return cal_R;
}
Nan, mais, c'est quand même ma fôte ma très grande fôte !!!!!
C'est une erreur de méthode JAVA de la classe Calendar :
- getMaximum donne le nombre maximum de jour d'un mois possible dans une année du calendrier considéré (pour nous, c'est évidement 31 ... , mais, j'ai cru comprendre que Calendar gérait d'autres calendriers où ça ne serait pas le cas),
- dans mon cas, il faut utiliser getActualMaximum qui donne le nombre maximum de jour du mois de la date considérée (en gérant les années bissextiles pour le mois de février).
Du coup, je ne résiste pas à l'envie de vous donner une méthode qui vas vous permettre de calculer des dates d'échéance mensuelle en tenant compte de la notion de "dernier jour du mois".
Ex :
Votre client signe le 28 février 2015.
C'est le dernier jour du mois.
Dans la logique humaine, sa prochaine échéance est le 31 mars pas le 28 mars.
Il ne suffit donc pas de juste ajouter un mois ce qui rendrait cette date du 28 mars.
Il faut tenir compte du nombre de jour du mois de départ et du nombre de jour du mois d'arrivée.
C'est ce que fais cette méthode :
private Calendar AddMois (Calendar cal, int pas) {
Calendar cal_R = Calendar.getInstance ();
cal_R.setTime(cal.getTime());
boolean fin_de_mois = (cal.get(Calendar.DAY_OF_MONTH) == cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal_R.add(Calendar.MONTH, pas);
if (fin_de_mois) {
cal_R.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
}
return cal_R;
}
Bonjour,
Plus simplement : le dernier jour du mois c'est la veille du premier jour du mois d'après.
Ce qui se simplifie encore :
Plus simplement : le dernier jour du mois c'est la veille du premier jour du mois d'après.
Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, 1); // le mois d'après cal.set(Calendar.DAY_OF_MONTH, 1); // le 1er du mois cal.add(Calendar.DAY_OF_MONTH, -1); // la veille
Ce qui se simplifie encore :
Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, 1); cal.set(Calendar.DAY_OF_MONTH, 0);La confiance n'exclut pas le contrôle.