Calculer l'écart entre 2 dates
Ce code calcul l'écart en années / mois / jours (complets) entre 2 dates :
Ajouter les imports suivants :
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ecartDate {
static int UN = 1;
static int DOUZE = 12;
public static void main(String[] args) {
Calendar calStr1 = Calendar.getInstance();
Calendar calStr2 = Calendar.getInstance();
Calendar calStr0 = Calendar.getInstance();
Date date1 = null;
Date date2 = null;
int nbMois = 0;
int nbAnnees = 0;
long nbJours = 0;
try {
date1 = new SimpleDateFormat("dd/MM/yyyy").parse("25/01/2006");
} catch (ParseException e) {
e.printStackTrace();
}
try {
date2 = new SimpleDateFormat("dd/MM/yyyy").parse("11/02/2014");
} catch (ParseException e) {
e.printStackTrace();
}
if (date1.equals(date2)) {
return;
}
calStr1.setTime(date1);
calStr2.setTime(date2);
nbMois = 0;
while (calStr1.before(calStr2)) {
calStr1.add(GregorianCalendar.MONTH, UN);
if (calStr1.before(calStr2) || calStr1.equals(calStr2)) {
nbMois++;
}
}
nbAnnees = (nbMois / DOUZE);
nbMois = (nbMois - (nbAnnees * DOUZE));
calStr0 = Calendar.getInstance();
calStr0.setTime(date1);
calStr0.add(GregorianCalendar.YEAR, nbAnnees);
calStr0.add(GregorianCalendar.MONTH, nbMois);
nbJours = (calStr2.getTimeInMillis() - calStr0.getTimeInMillis()) / 86400000;
System.out.print("Nb Annees : "+nbAnnees+"\n");
System.out.print("Nb Mois : "+nbMois+"\n");
System.out.print("Nb Jours : "+nbJours+"\n");
}
}
Nb Annees : 8
Nb Mois : 0
Nb Jours : 17
Etiquettes:
Commentaires
souad (non vérifié)
mar, 28/05/2013 - 11:40
Permalien
Jours
Comment s'il vous plait obtenir aussi le nombre des jours ?
ronan
mar, 28/05/2013 - 14:36
Permalien
Ajouter le calcul des jours
Bonjour,
Pour calculer le nombre de jours, vous pouvez ajouter à la fin du code les lignes suivantes :
// On créé un nouveau calendrier
GregorianCalendar calStr0 = new GregorianCalendar();
// On initialise un nouveau calendrier avec la date la plus ancienne
calStr0.setTime(date1);
// On ajoute au calendrier les années calculées
calStr0.add(GregorianCalendar.YEAR, nbAnnees);
// On ajoute au calendrier les mois calculés
calStr0.add(GregorianCalendar.MONTH, nbMois);
// On calcule en milli-secondes la différence entre les 2 calendriers que l'on divise par 86 400 000 pour obtenir le résultat en jours
long nbJours = (calStr2.getTimeInMillis() - calStr0.getTimeInMillis()) / 86400000;
souad (non vérifié)
ven, 05/07/2013 - 01:32
Permalien
vraiment merci infiniment !!
vraiment merci infiniment !! vous me sauvez la vie :)
Elvo (non vérifié)
lun, 04/11/2013 - 18:12
Permalien
Euh
Euh vous êtes sûr que le code marchera si les deux dates ont le même jour de mois...? Exple : 25/01/2006 et 25/06/2010
ronan
mer, 06/11/2013 - 08:19
Permalien
Effectivement, ça ne
Effectivement, ça ne fonctionne pas.
Merci pour l'info.
Je vais réfléchir à une autre méthode.
CH-JIHED (non vérifié)
lun, 10/02/2014 - 17:42
Permalien
try this :
try this :
if (date1.equals(date2)) {
return;
}
Calendar calStr1 = GregorianCalendar.getInstance();
Calendar calStr2 = GregorianCalendar.getInstance();
calStr1.setTime(date1);
calStr2.setTime(date2);
int nbMois = 0;
while (calStr1.before(calStr2)) {
calStr1.add(GregorianCalendar.MONTH, Constants.UN);
if (calStr1.before(calStr2) || calStr1.equals(calStr2)) {
nbMois++;
}
}
int nbAnnees = (nbMois / Constants.DOUZE);
nbMois = (nbMois - (nbAnnees * 12));
Calendar calStr0 = GregorianCalendar.getInstance();
calStr0.setTime(ecartDateVO.getDateDebut());
calStr0.add(GregorianCalendar.YEAR, nbAnnees);
calStr0.add(GregorianCalendar.MONTH, nbMois);
long nbJours = (calStr2.getTimeInMillis() - calStr0.getTimeInMillis()) / 86400000;
System.out.print("Nb Annees : "+nbAnnees+"\n");
System.out.print("Nb Mois : "+nbMois+"\n");
System.out.print("Nb Jours : "+nbJours+"\n");
ronan
mar, 11/02/2014 - 11:57
Permalien
Merci beaucoup
Effectivement, ça fonctionne beaucoup mieux.
florian (non vérifié)
ven, 07/07/2017 - 15:43
Permalien
bonjour,
bonjour,
Pouvez-vous m'expliquez la ligne:
....
calStr0.setTime(ecartDateVO.getDateDebut());
....
qu'est ce que le ecartDateVO ?
merci d'avance.
ronan
sam, 08/07/2017 - 00:49
Permalien
C'est vieux ...
... j'avoue que je suis embêté car je ne me souviens pas à quoi correspond l'objet ecartDateVO.
Toujours est-il que le code indiqué dans l'article fonctionne correctement.
Encode désolé.
Ajouter un commentaire