Difference de date
Résolu
Utilisateur anonyme
-
Siiimooon -
Siiimooon -
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.
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.
A voir également:
- Difference de date
- Difference tcp udp - Guide
- Difference million milliard - Accueil - Technologies
- Airpods 3 date de sortie - Guide
- Office 2024 date de sortie - Accueil - Bureautique
- Difference actif et en ligne messenger - Forum Facebook Messenger
9 réponses
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.
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.
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 :
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..
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..
Ce code
me donne :
70 années
7 mois
4 jours
Je crois qu'il y a une m**** quelque part LOL
:-(
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
:-(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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.
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+
A+
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;
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;
Salut à tous,
Voici mon code pour calculer l'age de quelqu'un au jour près :
Alors pour moi ça fonctionne, avec des anniversaire avant 1970 et après.
a+
Voici mon code pour calculer l'age de quelqu'un au jour près :
// On définit la date d'aujourd'hui : GregorianCalendar dateDuJour = new GregorianCalendar(); dateDuJour.setTime(new Date()); // On définit la date de naissance : GregorianCalendar dateNaissance = new GregorianCalendar(1984,7,4,0,0,0); // Attention les mois commence à 0 (janvier = 0, fev = 1,...) // On fait la différence en millisecondes : Long diff = dateDuJour.getTimeInMillis() - dateNaissance.getTimeInMillis(); // On passe la différence en Calendar : GregorianCalendar difference = new GregorianCalendar(); difference.setTimeInMillis(diff); // Le timestamp commençant le 1 janvier 1970, on enlève 1970 à l'année obtenue int year = difference.get(Calendar.YEAR) - 1970; int month = difference.get(Calendar.MONTH); int day = difference.get(Calendar.DAY_OF_MONTH); // RESULTAT : String age = year + " ans, " + month + " mois et " + day + " jours"; System.out.println(" Age : " + age);
Alors pour moi ça fonctionne, avec des anniversaire avant 1970 et après.
a+