Rechercher : dans
Par :

Difference de date

Dernière réponse le 19 sep 2008 à 11:29:05 Rocky_123, le 23 avr 2008 à 17:21:15 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Difference de date » dans :
Vérifier le format d'une date en PHP VoirIl existe plusieurs méthodes pour verifier le format d'une date en PHP, vous pouvez par exemple découper la chaîne puis tester les valeurs de chaque élément. Plus simplement nous utiliserons les expressions régulières. Pour valider une date au...
Javascript - L'objet Date VoirLes particularités de l'objet Date L'objet Date permet de travailler avec toutes les variables qui concernent les dates et la gestion du temps. Il s'agit d'un objet inclus de façon native dans Javascript, et que l'on peut toujours utiliser. La...
Fichier DAT VoirFormat DAT Un fichier DAT Un fichier .dat est un fichier de données (.DAT signifie data). En général, il s'agit d'un fichier binaire, créé par un programme et utilisable uniquement par ce programme, ce qui signifie qu'il n'est pas censé être ouvert...
ODBC (Open DataBase Connectivity) VoirQu'appelle-t-on ODBC? ODBC signifie Open DataBase Connectivity. Il s'agit d'un format défini par Microsoft permettant la communication entre des clients bases de données fonctionnant sous Windows et les SGBD du marché. Le gestionnaire ODBC est...

1

kij_82, le 23 avr 2008 à 17:34:22

Bonjour,

Tu peux récupèrer tes dates sous forme de timestamp (millisecondes écoulées), soustraire l'un à l'autre pour avoir la différence et créer un objet Time (ca doit exister) qui te permet de formater ton temps en millisecondes en chaine de caractères avec les années, mois, jours, etc.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

2

Rocky_123, le 23 avr 2008 à 17:37:00

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

Répondre à Rocky_123

3

kij_82, le 23 avr 2008 à 17:46:13

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 :) ~

Répondre à kij_82

4

Rocky_123, le 23 avr 2008 à 17:55:57

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

:-(

Répondre à Rocky_123

5

Rocky_123, le 23 avr 2008 à 17:58:36

Quant à la solution des modulos, d'accord mais les mois n'ont pas tous le même nombre de secondes, il faudra alors gérer. Il y a bien plusieurs méthodes, celle que j'ai semble fonctionner, seulement voilà, je suis de ceux qui aiment aussi optimiser le code pour le rendre plus propre.

Répondre à Rocky_123

6

kij_82, le 23 avr 2008 à 18:00:46

Erf, effectivement j'ai pas pensé aux mois :s
Si tu trouve un objet Time qui te donne ces temps tu pourra alors utiliser ce que j'ai mis plus haut, mais même avec ça, j'imagine que cet objet fera la même chose que toi, à savoir gérer les différences pour les mois, etc.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

7

Rocky_123, le 23 avr 2008 à 18:05:13

Bon ben faute de mieux, je mets donc en résolu, merci quand même, ça m'a donné une idée en tout cas...

A+

Répondre à Rocky_123

8

 jawed84, le 19 sep 2008 à 11:29:05

Bonjour,

vous pouvez utiliser ça aussi comme une requete postgres, elle retourne un resultat sous forme x Year, y month z days
select age(current_date, datequelconque)
from nom_table;

Répondre à jawed84
Collection CommentÇaMarche.net