Problème calcul nombre de jours entre 2 dates

volcomboy62 -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

J'essaie de calculer le nombre de jours qu'il y a entre deux dates :

Integer NbreJours = (int) (date2.getTime() - (int) date1.getTime());
System.out.println("date2.getTime : " + date2.getTime());
System.out.println("date1.getTime : " + date1.getTime());

System.out.println("Différence : " + NbreJours);

// Différence en jours
NbreJours = (NbreJours / (1000 * 60 * 60 * 24) + 1);

System.out.println("Différence en jours : " + NbreJours);

Sachant que la date2 = ma date de fin (23/09/2013)
et date1 = ma date de début (29/08/2013)

jobtient le résultat suivant :

la date de début est : 29/08/2013
la date de fin est : 23/09/2013
date2.getTime : 1379887200000
date1.getTime : 1377727200000
Différence : -2134967296
Différence en jours : -23

ce qui est faux et si je met comme date de fin le 22/09/2013 j'obtient le bon résultat :

la date de début est : 29/08/2013
la date de fin est : 22/09/2013
date2.getTime : 1379800800000
date1.getTime : 1377727200000
Différence : 2073600000
Différence en jours : 25

Pouvez vous m'expliquer ce qu'il ce passe ? car là je ne comprend pas du tout ce qu'il ce passe ...

1 réponse

  1. Doctor C Messages postés 630 Date d'inscription   Statut Membre Dernière intervention   400
     
    Je suis pas mal certain que le problème réside dans la première ligne de code:

    Integer NbreJours = (int) (date2.getTime() - (int) date1.getTime());  


    Java.util.Date.getTime()
    retourne un nombre de type "long" que tu convertis en "int".

    Dans ton cas, tes deux "getTime()" te retournent un nombre supérieur à la limite maximale du type de données "int". Cela a pour effet de "retrancher" des bits ce qui a de fortes probabilités de rendre ton nombre incorrect.

    Je crois que tu aurais plus de chance si tu utilisais un type "Long" pour ta variable "NbreJours":

    Long NbreJours = date2.getTime() - date1.getTime();  

    0
    1. volcomboy62
       
      Merci, c'est exactement sa.

      Je ne savais pas qu'il y avait une limite pour des objets de type int
      0
      1. KX Messages postés 19031 Statut Modérateur 3 020 > volcomboy62
         
        Il y a des limites pour tous les types de données.
        La valeur d'un int est comprise entre Integer.MIN_VALUE et Integer.MAX_VALUE.
        Si tu "debordes" tu te retrouves à l'autre extrémité. Ainsi
        Integer.MAX_VALUE+1=Integer.MIN_VALUE
        0