Calculer l'écart entre 2 dates

Calculer l'écart entre 2 dates

By ronan, 28 septembre, 2010

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

souad (not verified)

il y a 11 ans 9 mois

Comment s'il vous plait obtenir aussi le nombre des jours ?

ronan

il y a 11 ans 9 mois

In reply to by souad (not verified)

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;

Elvo (not verified)

il y a 11 ans 3 mois

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

il y a 11 ans 3 mois

In reply to by Elvo (not verified)

Effectivement, ça ne fonctionne pas.

Merci pour l'info.

Je vais réfléchir à une autre méthode.

CH-JIHED (not verified)

il y a 11 ans

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");

florian (not verified)

il y a 7 ans 7 mois

In reply to by CH-JIHED (not verified)

bonjour,

Pouvez-vous m'expliquez la ligne:

....
calStr0.setTime(ecartDateVO.getDateDebut());
....

qu'est ce que le ecartDateVO ?

merci d'avance.

ronan

il y a 7 ans 7 mois

In reply to by florian (not verified)

... 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é.