Difference de date
Résolu/Fermé
A voir également:
- Difference de date
- Difference tcp udp - Guide
- Trouver une date de naissance gratuit - Forum Webmastering
- Publipostage date inversée ✓ - Forum Word
- Airpods 3 date de sortie - Guide
- Passé cette date - Forum Logiciels
9 réponses
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
23 avril 2008 à 17:34
23 avril 2008 à 17:34
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.
Utilisateur anonyme
23 avril 2008 à 17:37
23 avril 2008 à 17:37
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.");
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
23 avril 2008 à 17:46
23 avril 2008 à 17:46
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..
Utilisateur anonyme
23 avril 2008 à 17:55
23 avril 2008 à 17:55
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
Utilisateur anonyme
23 avril 2008 à 17:58
23 avril 2008 à 17:58
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.
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
23 avril 2008 à 18:00
23 avril 2008 à 18:00
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.
Utilisateur anonyme
23 avril 2008 à 18:05
23 avril 2008 à 18:05
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+