Comment puis-je trouver le nombre d'années entre deux dates?
Je suis en train de déterminer un âge en années à partir d'une certaine date. Quelqu'un sait-il un moyen propre de faire cela dans Android? J'ai l'api Java disponible évidemment, mais le straight-up de l'api java est assez faible, et j'espérais que Android a quelque chose pour m'aider.
EDIT: Les multiples recommandations pour l'utilisation Joda time sous Android qui m'inquiète un peu à cause de Android Java - Joda Date est lent et les préoccupations. Aussi, tirant dans une bibliothèque ne pas livrés avec la plate-forme pour quelque chose de cette taille est probablement excessif.
- Une question similaire: stackoverflow.com/questions/1116123/...
- À la fois l'héritage
Date
/Calendar
classes et Joda-Time ont été supplanté par le java.de temps les classes. La plupart de la java.fonction temps est de retour, porté à Java 6 & Java 7 dans le ThreeTen-Backport projet. En outre adapté pour les précédents Android dans le ThreeTenABP projet. Voir Comment utiliser ThreeTenABP....
Vous devez vous connecter pour publier un commentaire.
java.util.Date
,java.util.Calendar
, etjava.text.SimpleDateFormat
sont maintenant héritage, supplantée par la java.temps les classes. La plupart des java.temps fonctionnalité est porté à Java 6 & Java 7 dans le ThreeTen-Backport projet. En outre adapté pour les précédents Android dans le ThreeTenABP projet. Voir Comment utiliser ThreeTenABP....Je vous conseille d'utiliser la grande Joda-Time bibliothèque pour tout liées à la date en Java.
Pour vos besoins, vous pouvez utiliser le
Ans.yearsBetween()
méthode.public int getYears(org.java.util.Date time) { org.joda.time.DateTime now = org.joda.time.DateTime.now(); org.joda.time.DateTime then = new org.joda.time.DateTime(time.getTime()); return org.joda.time.Years.yearsBetween(now, then).getYears(); }
tl;dr
java.temps
La vieille date-heure classes sont vraiment mauvais, tellement mauvais que les deux Sun & Oracle a accepté de la remplacer avec le java.les classes de temps. Si vous n'travaux importants avec la date-l'heure, l'ajout d'une bibliothèque à votre projet en vaut la peine. Le Joda-Time library était très réussie et a recommandé, mais est maintenant en mode de maintenance. L'équipe conseille les migrations à la java.les classes de temps.
Une grande partie de la java.fonction temps est de retour, porté à Java 6 & 7 dans ThreeTen-Backport et plus adapté à Android dans ThreeTenABP (voir Comment l'utiliser...).
De vidage de la console.
Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Je ne peut apparemment pas encore de commentaires, mais je pense que vous pouvez simplement utiliser le DAY_OF_YEAR à la séance d'entraînement si vous devez ajuster les ans un (copié et modifié à partir de l'actuel meilleure réponse)
De la même manière que vous pourriez probablement juste diff ms représentations du temps et de diviser par le nombre de ms en un an. Il suffit de garder tout au longs et qui devrait être assez bon, la plupart du temps (les années bissextiles, aïe), mais cela dépend de votre application pour le nombre d'années et de façon performante que la fonction de la météo, il serait utile de ce genre de hack.
Je sais que vous avez demandé une solution propre, mais en voici deux, sale une fois:
Voici ce que je pense est une meilleure méthode:
MODIFIER
À part un bug que j'ai corrigé, cette méthode ne fonctionne pas bien avec les années bissextiles. Voici un test complet de la suite. Je suppose que vous êtes mieux à l'aide de la accepté de répondre.
Si vous ne voulez pas de la calculer à l'aide de java du Calendrier, vous pouvez utiliser Les androïdes Temps de classe Il est censé être plus rapide mais je n'ai pas remarqué une grande différence quand je suis passé.
Je ne pouvais pas trouver tout de pré-défini les fonctions de déterminer le temps entre 2 dates pour un âge Android. Il y a quelques belles fonctions d'assistance pour obtenir de l'formaté de temps entre les dates dans le DateUtils mais ce n'est probablement pas ce que vous voulez.
Essayez ceci:
Cela va fonctionner et si vous souhaitez que le nombre d'années de remplacer 12 à 1
date1 = "07-11-2015"
etdate2 = "07-01-2016"
. Résultat attendu était de 2 mois, au Lieu de cela j'ai euThe Total Months difference between two dates is --> 22 Months
. C'est plus facile que vous pensez à obtenir la date de mathématiques de mal, et encore plus quand vous choisissez pauvres, les noms de variables. Il ya une raison pourquoi les gens préfèrent les et de défendre les classes de la bibliothèque.Merci @Ole V. v pour la revoir: j'ai trouvé quelques intégré de bibliothèque de classes qui ne le même
Simplement, vous pouvez calculer la différence entre deux dates millisecondes et diviser par secondes, des minutes, des heures, des jours et des mois
essayer cela,