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

Comment s'il vous plait obtenir aussi le nombre 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;

vraiment merci infiniment !! vous me sauvez la vie :)

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

Effectivement, ça ne fonctionne pas.

Merci pour l'info.

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

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

Effectivement, ça fonctionne beaucoup mieux.

bonjour,

Pouvez-vous m'expliquez la ligne:

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

qu'est ce que le ecartDateVO ?

merci d'avance.

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

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.