OVH Cloud OVH Cloud

nombre de jour entre 2 date !

9 réponses
Avatar
Arthur
Bonjour
j'ai besoin de comparer deux Date, pour en extraire la difference en
nombre de jour. Que me conseillez-vous d'utiliser pour effectuer cela de
façon efficace.

Par avance merci.

9 réponses

Avatar
JScoobyCed
Arthur wrote:
Bonjour
j'ai besoin de comparer deux Date, pour en extraire la difference en
nombre de jour. Que me conseillez-vous d'utiliser pour effectuer cela de
façon efficace.

Par avance merci.


Bonjour,

Je dirais que d'utiliser un objet Calendar:
<pseudo-code>

public int getDayDiff(Date date1, Date date2) {
long diff = date1.getTime()-date2.getTime();
if(diff<0) {
diff = 0 - diff;
}
Calendar cal = Calendar.getInstance();
cal.setTime(diff);
return cal.get(Calendar.DAY_OF_YEAR);
}

</pseudo-code>

---
JSC

Avatar
Isammoc
public int getDayDiff(Date date1, Date date2) {
long diff = date1.getTime()-date2.getTime();
if(diff<0) {
diff = 0 - diff;
}
Calendar cal = Calendar.getInstance();
cal.setTime(diff);
return cal.get(Calendar.DAY_OF_YEAR);
}
</pseudo-code>



Et s'il y a + de 365 jours... Ca marche pas...

--- <---- Signature non standard
JSC


--
Isammoc

Avatar
Jerrek
On 14 Dec 2004 09:06:57 GMT
Isammoc <Isammoc.jeux(no-spam)@free.fr> wrote:

public int getDayDiff(Date date1, Date date2) {
long diff = date1.getTime()-date2.getTime();
if(diff<0) {
diff = 0 - diff;
}
Calendar cal = Calendar.getInstance();
cal.setTime(diff);
return cal.get(Calendar.DAY_OF_YEAR);
}
</pseudo-code>



Et s'il y a + de 365 jours... Ca marche pas...

--- <---- Signature non standard
JSC


--
Isammoc


Ben une solution serait de créer une absolue à partir d'une date entr ée, en nombre de jours par exemple à partir du premier jour de l'an 0.

Fred


Avatar
Bruno Jouhier
Le plus efficace, c'est probablement de faire

long millis = Math.abs(d1.getTime() - d2.getTime());
int days = (int)Math.round((double)millis / 86400000);

Le round permet de gérer le cas où on est passé de l'heure d'hiver à l'heure
d'été entre les 2 dates.

Bruno.

"Arthur" a écrit dans le message de news:
41be9f1a$0$10204$
Bonjour
j'ai besoin de comparer deux Date, pour en extraire la difference en
nombre de jour. Que me conseillez-vous d'utiliser pour effectuer cela de
façon efficace.

Par avance merci.


Avatar
Arthur
Le plus efficace, c'est probablement de faire

long millis = Math.abs(d1.getTime() - d2.getTime());
int days = (int)Math.round((double)millis / 86400000);

Le round permet de gérer le cas où on est passé de l'heure d'hiver à l'heure
d'été entre les 2 dates.

Bruno.

"Arthur" a écrit dans le message de news:
41be9f1a$0$10204$

Bonjour
j'ai besoin de comparer deux Date, pour en extraire la difference en
nombre de jour. Que me conseillez-vous d'utiliser pour effectuer cela de
façon efficace.

Par avance merci.






Je vais regarder cela de près.

Merci pour l'ensemble de vos réponse !

a+


Avatar
JScoobyCed
Isammoc wrote:

</pseudo-code>




Et s'il y a + de 365 jours... Ca marche pas...


Ok, mais j'ai mis <pseudo-code>, qui donne l'idee principale.



--- <---- Signature non standard



J'ai eu un rabais sur les '-'

---------------------------
---------------------
---------------------------
JSC


Avatar
Bruno Jouhier
"JScoobyCed" a écrit dans le message de news:
41bf9a54$0$23442$
Isammoc wrote:

</pseudo-code>




Et s'il y a + de 365 jours... Ca marche pas...


Ok, mais j'ai mis <pseudo-code>, qui donne l'idee principale.


Il n'en reste pas moins que l'utilisation de Calendar n'apporte que des
complications dans le problème qui était posé. Outre le fait que ça ne
marche pas s'il y a + de 365 jours, ça ne marche pas non plus si on passe du
31 décembre au 1er janvier (il n'y a pourtant qu'un jour), et ce n'est pas
si facile que ça à corriger car il faut savoir si l'année est bissextile ou
pas (le DAY_OF_YEAR du 31 décembre en dépend), etc.

Bref, pour calculer la différence en jours, il suffit de calculer la
différence en millisecondes et de diviser par le nombre de millisecondes par
jour, en n'oubliant pas d'arrondir (au lieu de tronquer) pour ne pas avoir
de mauvaises surprises si une heure a disparu entre les 2 à cause du passage
à l'heure d'été. Pas besoin de Calendar pour ça.

Bruno.




--- <---- Signature non standard



J'ai eu un rabais sur les '-'

---------------------------
---------------------
---------------------------
JSC




Avatar
Bruno Jouhier
"Bruno Jouhier" a écrit dans le message de news:
41bfea74$0$20831$

"JScoobyCed" a écrit dans le message de news:
41bf9a54$0$23442$
Isammoc wrote:

</pseudo-code>




Et s'il y a + de 365 jours... Ca marche pas...


Ok, mais j'ai mis <pseudo-code>, qui donne l'idee principale.


Il n'en reste pas moins que l'utilisation de Calendar n'apporte que des
complications dans le problème qui était posé. Outre le fait que ça ne
marche pas s'il y a + de 365 jours, ça ne marche pas non plus si on passe
du 31 décembre au 1er janvier (il n'y a pourtant qu'un jour), et ce n'est
pas si facile que ça à corriger car il faut savoir si l'année est
bissextile ou pas (le DAY_OF_YEAR du 31 décembre en dépend), etc.


Ooups. J'étais passé un peu vite sur le pseudo-code. Ce que je viens
d'écrire est faux, il n'y a pas de pb particulier quand on passe du 31 dec
au 1er janvier, mais c'est quand même une utilisation incorrecte de Calendar
(faire un setTime avec une différence entre 2 dates, ça n'a pas de sens) et
ça donne une réponse erronée (décalée de 1 jour car DAY_OF_YEAR varie de 1 à
366 et l'origine des dates est un 1er janvier). Même si on corrige ce
décalage de 1, on a quand même des surprises. Par exemple, le résultat
dépend de la TimeZone: avec la TimeZone "CET", on obtient 2 jours entre le 5
et le 7 décembre, mais en timezone "EST", on obtient 1 jour!! (quizz:
pourquoi?).

Bruno.


Bref, pour calculer la différence en jours, il suffit de calculer la
différence en millisecondes et de diviser par le nombre de millisecondes
par jour, en n'oubliant pas d'arrondir (au lieu de tronquer) pour ne pas
avoir de mauvaises surprises si une heure a disparu entre les 2 à cause du
passage à l'heure d'été. Pas besoin de Calendar pour ça.

Bruno.




--- <---- Signature non standard



J'ai eu un rabais sur les '-'

---------------------------
---------------------
---------------------------
JSC








Avatar
JScoobyCed
Bruno Jouhier wrote:
"Bruno Jouhier" a écrit dans le message de news:
41bfea74$0$20831$



Bref, pour calculer la différence en jours, il suffit de calculer la
différence en millisecondes et de diviser par le nombre de millisecondes
par jour, en n'oubliant pas d'arrondir (au lieu de tronquer) pour ne pas
avoir de mauvaises surprises si une heure a disparu entre les 2 à cause du
passage à l'heure d'été. Pas besoin de Calendar pour ça.

Bruno.



Ok, mon choix de Calendar etait pas tres judicieux pour ce cas.

--
JSC