OVH Cloud OVH Cloud

JAVA: calcul sur les dates

4 réponses
Avatar
Techno06
Salut à tous,

question de base.

J'ai une date1 et une date2, je voudrais savoir combien de jours séparent
ces deux dates.
La version avec une boucle en incrémentant de 1 jour une des deux dates pour
rejoindre l'autre n'est pas envisageable car beaucoup trop lent.

Ca doit fonctionner y compris avec un decompte négatif.

Merci d'avance pour votre aide
T.

4 réponses

Avatar
Frédéric Augé
Techno06 wrote:
Salut à tous,

question de base.

J'ai une date1 et une date2, je voudrais savoir combien de jours séparent
ces deux dates.
La version avec une boucle en incrémentant de 1 jour une des deux dates pour
rejoindre l'autre n'est pas envisageable car beaucoup trop lent.

Ca doit fonctionner y compris avec un decompte négatif.

Merci d'avance pour votre aide
T.


Salut !


Ca doit être le 2ème problème de base en Java, après s'être rendu compte
que le == entre les strings ça ne marche pas top ;-) (encore passé il
n'y a pas longtemps)

Tuyau:
- regarde comment récupérer un objet Date et faire appel à la méthode
getTime()
- soustraction des 2 dates
- construction d'une nouvelle date avec le résultat
- affichage de tout ce que tu veux sur cette nouvelle date

Avec ça et la javadocs des classes Date, Calendar et GregorianCalendar,
tu devrais t'en sortir.

Frédéric

Avatar
Vincent Brabant

Salut à tous,

question de base.

J'ai une date1 et une date2, je voudrais savoir combien de jours séparent
ces deux dates.
La version avec une boucle en incrémentant de 1 jour une des deux dates pour
rejoindre l'autre n'est pas envisageable car beaucoup trop lent.

Ca doit fonctionner y compris avec un decompte négatif.

Merci d'avance pour votre aide
T.


/*

* DateComparator.java
*
* Created on 3 février 2004, 22:22
*/

package fr.comp.lang.java.date;

import java.util.Calendar;
import java.util.Date;

public class DateComparator {

private static long durée1heure = 1000*60*60;////1000 millisecondes * 60 secondes * 60 minutes = 1 heure
private static long durée1jour = durée1heure*24; //1 heure * 24 = 1 jour

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
{
//Exemple avec Date
Date d1 = new Date(); //Date de maintenant
Date d2 = new Date(d1.getTime()+3*durée1jour); //Date dans 3 jours
calculerDifférence(d1, d2);
}
{
//Exemple avec Calendar
Calendar c1 = Calendar.getInstance(); // Date de maintenant
Calendar c2 = Calendar.getInstance(); // Date de maintenant
c2.add(Calendar.DATE, 5); // Date dans 5 jours
calculerDifférence(c1, c2);
}
}

private static void calculerDifférence(Date d1, Date d2) {
long différence = Math.abs(d1.getTime()-d2.getTime()); //calcul différence entre les deux dates
System.out.println(différence); //affiche la différence en nombre de millisecondes
System.out.println("Nombre de jours entre "+d1+" et "+d2+": "+différence / durée1jour); //affiche la différence en nombre de jours
}
private static void calculerDifférence(Calendar c1, Calendar c2) {
calculerDifférence(c1.getTime(), c2.getTime());
}

}


--
Vincent Brabant
----------------
http://www.netbeans.org/index_fr.html
http://vbrabant-fr.skynetblogs.be

Avatar
Excellent !!! SUPER !!!

Merci bien !
T.
Avatar
Re-Salut Vincent,

Merci encore pour ta suggestion.

Ta metode qui calcule le nombre de jours entre deux dates fonctionne bien si
on considere le temps. Par exemple, entre 29 jan 2004 a 23h00 et le 30 jan
2004, il y a effectivement 0 jour de difference car elle n'est que d'une
heure.

Dans mon cas, j'ai besoin d'ignorer le temp et il faut considerer qu'il y a
1 jour entre 29 jan 2004 a 23h00 et le 30 jan 2004. Le dernier point: il
faut que mon resultat transmette la notion de decompte negatif (+ ou - 3
jours par exemple).

Donc voici finalement ce que je pense utiliser:

private static long DayInMillisecond$*60*60*1000;


private String getDiffDaysBetweenTwoDates(Date firstDate, Date
SecondDate){
long nbDaysFirstDate=firstDate.getTime()/DayInMillisecond;
long nbDaysSecondDate=SecondDate.getTime()/DayInMillisecond;
return Long.toString(nbDaysSecondDate-nbDaysFirstDate);
}

@+,
T.