Problème calcul nombre de jours entre 2 dates

Fermé
volcomboy62 - 10 déc. 2013 à 16:59
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 10 déc. 2013 à 18:21
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 ...




A voir également:

1 réponse

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
10 déc. 2013 à 17:19
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
Merci, c'est exactement sa.

Je ne savais pas qu'il y avait une limite pour des objets de type int
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > volcomboy62
Modifié par KX le 10/12/2013 à 18:23
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