Transtypage bizarre

3 réponses
Avatar
Yvon
Bonsoir

voila un exemple de transtypage de long en int qui ne devrait pas créer de
problème car les grandeurs à manier sont petites (différence en jours entre
2 dates).
Le résultat varie selon la façon d'écrire.
Exemple dessous : nombre de jours entre le 20 décembre 2011 et le 14 février
2012 doit être de 56 et on trouve 6
Si on remplace la ligne du RETURN de la méthode differenceJours par les 2
lignes de commentaires au dessus, ça marche, résultat 36.

Pourquoi ça coince dans un cas et pas dans l'autre ?
Je donne ma langue au chat.
A+


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class essai {

static int differenceJours(String jour1, String jour2){
//calcule nombre de jour entre 2 dates codées en String AAAA-MM-JJ
long nbrJours = 0;
Date date1 = null;
Date date2 = null;
SimpleDateFormat monFormat = new SimpleDateFormat("yyyy-MM-dd");
try{// le format et la validité des dates a été vérifié avant
date1 = monFormat.parse(jour1);
date2 = monFormat.parse(jour2);
}
catch(ParseException e){}
//nbrJours = ( date2.getTime()-date1.getTime() ) / (1000*60*60*24);
//return (int)nbrJours;
return (int)( date2.getTime()-date1.getTime() ) / (1000*60*60*24);
}//fin differenceJours


public static void main(String[] args)
int nombre = differenceJours("2011-12-20","2012-02-14");
System.out.println("nombre de jour entre les dates = "+nombre);
}
}
--
Yvon
http://perso.numericable.fr/vertgalant/

3 réponses

Avatar
Yvon
Yvon wrote:

Bonsoir

voila un exemple de transtypage de long en int qui ne devrait pas créer de
problème car les grandeurs à manier sont petites (différence en jours
entre 2 dates).
Le résultat varie selon la façon d'écrire.
Exemple dessous : nombre de jours entre le 20 décembre 2011 et le 14
février 2012 doit être de 56 et on trouve 6
Si on remplace la ligne du RETURN de la méthode differenceJours par les 2
lignes de commentaires au dessus, ça marche, résultat 36.

Pourquoi ça coince dans un cas et pas dans l'autre ?
Je donne ma langue au chat.
A+


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class essai {

static int differenceJours(String jour1, String jour2){
//calcule nombre de jour entre 2 dates codées en String AAAA-MM-JJ
long nbrJours = 0;
Date date1 = null;
Date date2 = null;
SimpleDateFormat monFormat = new SimpleDateFormat("yyyy-MM-dd");
try{// le format et la validité des dates a été vérifié avant
date1 = monFormat.parse(jour1);
date2 = monFormat.parse(jour2);
}
catch(ParseException e){}
//nbrJours = ( date2.getTime()-date1.getTime() ) / (1000*60*60*24);
//return (int)nbrJours;
return (int)( date2.getTime()-date1.getTime() ) / (1000*60*60*24);
}//fin differenceJours


public static void main(String[] args)
int nombre = differenceJours("2011-12-20","2012-02-14");
System.out.println("nombre de jour entre les dates = "+nombre);
}
}


Y a une faute de frappe.
Quand ça marche le bon résultat est 56 !!
--
Yvon
http://perso.numericable.fr/vertgalant/
Avatar
Yliur
Le Thu, 16 Feb 2012 20:01:24 +0100
Yvon a écrit :

Bonsoir

voila un exemple de transtypage de long en int qui ne devrait pas
créer de problème car les grandeurs à manier sont petites (différence
en jours entre 2 dates).
Le résultat varie selon la façon d'écrire.
Exemple dessous : nombre de jours entre le 20 décembre 2011 et le 14
février 2012 doit être de 56 et on trouve 6
Si on remplace la ligne du RETURN de la méthode differenceJours par
les 2 lignes de commentaires au dessus, ça marche, résultat 36.



36 ou 56 finalement ;) ?

Pourquoi ça coince dans un cas et pas dans l'autre ?
Je donne ma langue au chat.
A+



Attention, l'opérateur de transtypage est prioritaire sur la division
me semble-t-il. Donc il faut écrire plutôt
(int) (( date2.getTime()-date1.getTime() ) / (1000*60*60*24));
^ ^
Avatar
Yvon
Yliur wrote:

Le Thu, 16 Feb 2012 20:01:24 +0100
Yvon a écrit :

Bonsoir

voila un exemple de transtypage de long en int qui ne devrait pas
créer de problème car les grandeurs à manier sont petites (différence
en jours entre 2 dates).
Le résultat varie selon la façon d'écrire.
Exemple dessous : nombre de jours entre le 20 décembre 2011 et le 14
février 2012 doit être de 56 et on trouve 6
Si on remplace la ligne du RETURN de la méthode differenceJours par
les 2 lignes de commentaires au dessus, ça marche, résultat 36.



36 ou 56 finalement ;) ?

Pourquoi ça coince dans un cas et pas dans l'autre ?
Je donne ma langue au chat.
A+



Attention, l'opérateur de transtypage est prioritaire sur la division
me semble-t-il. Donc il faut écrire plutôt
(int) (( date2.getTime()-date1.getTime() ) / (1000*60*60*24));
^ ^



Exact ! ça marche.
Merci, je ne mourrais pas idiot !
--
Yvon
http://perso.numericable.fr/vertgalant/