Java calculer les jours de l'année
Est-il une méthode native Java de la classe de calculer combien de jours ont été/seront dans un an? Aussi, était-il un Année bissextile (366 jours) ou une année normale (365 jours)?
Ou dois-je l'écrire moi-même?
Je suis calculer le nombre de jours entre deux dates, par exemple, combien de jours avant mon anniversaire. Je veux prendre en compte le 29 février d'une année Bissextile. J'ai tout fait sauf que 29.
source d'informationauteur jurchiks
Vous devez vous connecter pour publier un commentaire.
La
GregorianCalendar
standar classe a unisLeapyear()
méthode. Si tout ce que vous avez est un numéro de l'année (par exemple,2008
), puis de construire une date à l'aide cette constructeur, et de vérifier ensuite laisLeapYear()
méthode par la suite.Une autre façon de le faire est de demander à la
Calendar
classe pour le nombre maximal de jours dans une année donnée:Ce sera le retour de 366 pour une bisestile année, 365 pour un normal.
Remarque, j'ai utilisé
getActualMaximum
au lieu degetMaximum
qui renvoie toujours 366.Pour DateTime calculs je recommande fortement d'utiliser le JodaTime de la bibliothèque. Pour ce dont vous avez besoin, en particulier, il serait en une seule ligne:
J'espère que cette aide.
tl;dr
java.temps
Dans Java 8 et, plus tard, nous avons le java.en temps. (Tutoriel)
length
La
Year
classe représente une seule valeur de l'année. Vous pouvez interroger sa longueur.isLeap
Vous pouvez également demander si une année est une année Bissextile ou non.
Comme un exemple, obtenir le nombre de jours dans l'année à l'aide de Java opérateur ternairetels que:
Dans notre cas, nous voulons nombre de jours de l'année. C'est 365 pour les années non Bissextiles, et 366 pour les années Bissextiles.
Jour de l'année
Vous pouvez obtenir le jour du numéro de l'année d'une date. Ce nombre varie de 1 à 365 ou 366 pour les années bissextiles.
Aller dans l'autre direction, obtenir une date pour un jour de l'année.
Vous pourriez déterminer les jours écoulés par la comparaison de ces jours de l'année, les numéros lorsque vous traitez avec une seule année. Mais il y a un moyen plus facile; lire sur.
Jours écoulés
Utiliser le
ChronoUnit
enum pour calculer les jours écoulés.Gère automatiquement Année Bissextile.
Sur java.temps
La java.le 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 maintenanceconseille 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.
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.GregorianCalendar.isLeapYear(int année)
Vous pouvez regarder la page de Wikipedia pour certains très joli pseudo-code:
Je suis sûr que vous pouvez comprendre comment mettre en œuvre cette logique en Java. 🙂
Vous exact de cas d'utilisation peuvent être mieux résolus avec Joda et ce exemple.
Vous pouvez utiliser le TimeUnit classe. Pour vos besoins spécifiques, il doit faire:
Honnêtement, je ne vois pas où les années bissextiles jouer un rôle quelconque dans ce calcul. Peut-être que j'ai raté un aspect de votre question?
Edit: Stupide moi, les années bissextiles, la magie qui se passe dans le
Date.getTime()
. De toute façon, vous n'avez pas à traiter avec elle de cette façon.