salut,
Comment ontenir le nombre de jours compris entre 2 dates?
merci
salut,
Comment ontenir le nombre de jours compris entre 2 dates?
merci
La classe Date à une méthode getTime ( voir javadoc ) qui retourne le nombre de milliseconde depuis le 1er janvier 1970. la différence entre deux appels de méthode, le tout divisé par le nombre de millisecondes contenues dans une journée te donneras le nombre de jours de différence.
Voir laici !
Si tu veux le nombre de jours calendaires...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Date date1 = new Date(); Calendar calendrier1 = Calendar.getInstance(); calendrier1.setTime(date1); int jours1 = calendrier1.get(Calendar.DAY_OF_YEAR); Date date2 = new Date(); Calendar calendrier2 = Calendar.getInstance(); calendrier2.setTime(date2); int jours2 = calendrier2.get(Calendar.DAY_OF_YEAR); System.out.println(jours2-jours1);![]()
Euh, ton truc ne marche que si tu souhaites avoir la différence de jour dans la même année. Sinon, tu es bien obligé de passer par le nombre de ms :Envoyé par g_rare
Enjoy.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 double ms = calendarEnd.getTimeInMillis() - calendarBegin.getTimeInMillis(); long nbDays = Math.round(ms / (24 * 60 * 60 * 1000));
Bonjour,
Je relance ce post à cause d'un truc tout con mais la solution donnée ne marche pas
Si ont par du principe que le nb de milliseconde dans une journée varie en fonction de la date c'est pas bon :s
Une autres solution par hasard?
Enfaîte c'est bon avec un arrondi et bien passer à mettre la date de début à l'heure suivante 0:0:0:0 et l'heure sur la date de fin à 23:59:59:59 et c'est bon
Et bien penser à l'arrondi pcq l'ont perd qlq centième.
J'ai vu un -1 sur mon post précédent, pour ma défence c'est un expert java avec + de 10 ans d'xp qui ma dit de faire gaffe au timestamp le nb de millisecondes n'est pas égal d'une date à l'autre.
Tu pourras lui demander de calculer quand sera le premier jour où il y aura une erreur due à cette différence de qqs ms. Parce qu'effectivement, comme on calcule en jours, il faut que la différence cumulée fasse plus de 0.5j pour que cela ait un impact !
De toute façon si on veut pas avoir de problème avec des millisecondes, il suffit de les mettre elles aussi à zéro, comme pour l'heure, les minutes et les secondes. Cet "expert Java" n'y connaît rien, c'est une chose de pas savoir mais c'en est une autre de ne pas le deviner, un expert Java aurait deviné.
Le problème est pas là. Le vrai problème c'est plutôt les changements d'heure.
Tous les jours de l'année ne font pas 24 heures. Il y en a un qui fait 23 heures et un autre qui fait 25 heures. Le calcul du nombre de millisecondes ne suffit pas. Certes, un calcul flottant et un arrondi, ça résout le problème. Il n'y a jamais plus d'une heure d'erreur, ce qui, même sur un seul jour, reste le plus proche du résultat correct.
Mais ça fait pas super propre. Si on programme comme ça sans indiquer exactement pourquoi, la prochaine personne qui passe par là, va virer les flottants et les arrondis, parce qu'ils n'ont pas leur place ici : ce sont des calculs entiers. C'est important d'indiquer que tous les jours ne font pas 24 heures, pourquoi, qu'il peut donc y avoir une erreur et que le calcul exact est compliqué, d'où cette méthode préférée.
Ah, et bien sûr, c'est typiquement le genre de choses qui devraient motiver à utiliser Joda-Time, une bibliothèque third party de gestion des dates, qui sait dire le nombre de jours calendaires entre deux dates.
Pourquoi tant d'agressivité :/
Non plus sérieusement c'est un échange de couloir que j'ai eu avec lui genre à tu manipule des dates fait gaffe au timestamp.
Et il avait raison si ont reprend mon soucis initial
dernier jour a 0:0:0:0 (h:m:s:ms) au lieu de 23:59:59 logique et rien a voir avec les pb de ms dit plus haut je perd une journée.
Ensuite sans prendre en compte le conseil sur les timestamp je balance mon résultat dans un integer alors je reperd une journée si ont par du principe que les ms sont égaux chaque jours alors la différence entre 2 dates à minuit serait entier alors que la se n'est pas le cas.
Donc son conseil de couloir n'était pas si nul que ça.
Sans le contexte dire qu'il n'y connait rien, c'est un jugement facile et rapide...
Ben oui, mais c'est pas du tout comme ça que tu avais présenté les choses. Ce que tu as dit est en substance "c'est un expert Java qui m'a dit de faire comme ça, c'est pas moi." Et cela était faux. Un expert Java t'a donné un conseil, tu as fait tes déductions à ta sauce et tu nous as parlé de ce que tu as fait à la fin. Pas pareil.
J'ai peu de tolérance quand on me sort le mot "expert." Mon premier réflexe est de dire que ce mot n'a rien à faire dans la conversation : un expert ne se dit pas, il se montre.
Partager