|
|
|
|
Bonjour,
Juste une question, est-ce qu'une méthode déjà fournie en Java pourrait me donner la différence entre deux dates, non pas en jours (ça je sais le faire) mais précisément sous cette forme :
3 années, 1 mois, 5 jours, 14 heures...
C'est pour une petite animation pour un site.
J'ai vu la classe GregorianCalendar mais je trouve lourd pour calculer ça, il faut ajuster pour voir s'il n'y a pas de dépassement dans les mois (dans ce cas on a des valeurs négatives...)... Je sais comment m'y prendre, juste pour lancer un peu une discussion, sur une méthode SIMPLE et PRECISE.
Configuration: Windows XP Firefox 2.0.0.14
Bonjour,
|
Voici la méthode que j'ai trouvé, ça marche, c'était pour voir si on peut faire un peu plus simple :
GregorianCalendar aujourdhui = new GregorianCalendar(2008,4,22,0,0,0); // 22 mai 2008
GregorianCalendar apres = new GregorianCalendar(2009,0,1,0,0,0); // 1 janvier 2009
int ans = apres.get(Calendar.YEAR)-aujourdhui.get(Calendar.YEAR);
boolean ajusteAnnee=false;
aujourdhui.add(Calendar.YEAR, ans);
if(aujourdhui.after(apres))
{
ajusteAnnee=true;
aujourdhui.add(Calendar.YEAR, -1);
ans--;
}
int mois = apres.get(Calendar.MONTH)-aujourdhui.get(Calendar.MONTH);
if(ajusteAnnee && mois<=0)
mois+=11;
aujourdhui.add(Calendar.MONTH, mois);
if(aujourdhui.after(apres))
{
aujourdhui.add(Calendar.MONTH, -1);
mois-=1;
}
int jours =apres.get(Calendar.DAY_OF_YEAR)-aujourdhui.get(Calendar.DAY_OF_YEAR);
if(jours<0)
jours+=365;
System.out.println(ans + " annees.");
System.out.println(mois + " mois.");
System.out.println(jours + " jours.");
|
Tu peux faire aussi comme cela :
GregorianCalendar aujourdhui = new GregorianCalendar(2008,4,22,0,0,0); // 22 mai 2008 GregorianCalendar apres = new GregorianCalendar(2009,0,1,0,0,0); // 1 janvier 2009 long aTime = aujourdhui.getTimeInMillis(); long bTime = apres.getTimeInMillis(); long dif = bTime - aTime; Timestamp myTimer = new Timestamp(dif); myTimer.getYear() ... Et si tu ne veux plus utiliser t'objet gregorianCalendar tu peux toujours utiliser un objet Date ou équivalent. EDIT : apparemment non ca ne fonctionne pas. Timestamp permet de définir une date et non une durée écoulée. Ce que tu peux faire c'est une fois la différence récupérer, tu module le nombre d'année en faisant un modulo (opérateur %) par rapport au nombre de secondes dans une années, pour avoir le nombre de mois, tu prends le reste de ce modulo et tu le module à nouveau par le nombre de secondes dans un mois, et ainsi de suite.. ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Ce code
GregorianCalendar aujourdhui = new GregorianCalendar(2008,4,22,0,0,0); // 22 mai 2008 GregorianCalendar apres = new GregorianCalendar(2009,0,1,0,0,0); // 1 janvier 2009 long aTime = aujourdhui.getTimeInMillis(); long bTime = apres.getTimeInMillis(); long dif = bTime - aTime; Timestamp myTimer = new Timestamp(dif); int ans = myTimer.getYear(); int mois = myTimer.getMonth(); int jours = myTimer.getDay(); System.out.println(ans + " annees."); System.out.println(mois + " mois."); System.out.println(jours + " jours."); me donne : 70 années 7 mois 4 jours Je crois qu'il y a une m**** quelque part LOL :-( |
Erf, effectivement j'ai pas pensé aux mois :s
|

