Pour le calcul Period
suivant:
Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 9, 2))
le résultat est:
P1M1D
Cela équivaut à 31 jours + 1 jour = 32 jours.
Pour ce Period
:
Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 10, 2))
le résultat est:
P2M1D
Cela équivaut à: 31 jours (en août) + 30 jours (en septembre) + 1 (en octobre) = 62 jours
Existe-t-il une méthode dans le Java.time
package qui donnera le nombre de jours dans un Period
? Je n'en trouve pas. Je ne sais pas si j'ai oublié quelque chose ou si c'est tout simplement pas là.
De la documentation :
Pour définir une durée avec des valeurs basées sur la date (années, mois, jours), utilisez la classe
Period
. La classePeriod
fournit diverses méthodes get, telles quegetMonths
,getDays
etgetYears
. Pour présenter la quantité> de temps mesurée dans une seule unité de temps, comme des jours, vous pouvez utiliser leChronoUnit.between
méthode.LocalDate today = LocalDate.now(); LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1); Period p = Period.between(birthday, today); long p2 = ChronoUnit.DAYS.between(birthday, today); System.out.println("You are " + p.getYears() + " years, " + p.getMonths() + " months, and " + p.getDays() + " days old. (" + p2 + " days total)");
Le code produit une sortie similaire à la suivante:
You are 53 years, 4 months, and 29 days old. (19508 days total)
Il n'y a aucun moyen de faire ce que vous demandez. La raison en est qu'il n'est pas possible à partir d'un Period
de déduire le nombre réel de jours calendaires dans la période. Un Period
n'est pas lié à des dates spécifiques, une fois construit comme vous le montrez, il perd la trace des dates réelles du calendrier.
Par exemple, votre première période représente une période de 1 mois et 1 jour. Mais la période ne se soucie pas du mois. Il s'agit simplement d'un concept "d'un mois et d'un jour".
Si vous avez besoin du nombre de jours entre deux dates, vous devez utiliser ChronoUnit.DAYS.between
comme l'écrit Saket Mittal.
Il y a un objet spécifique en fonction de la durée que vous souhaitez traiter. Cette page ici est très utile pour expliquer ce qui est le mieux pour votre scénario.
La méthode ChronoUnit.between est utile lorsque vous souhaitez mesurer une quantité de temps dans une seule unité de temps, comme des jours ou des secondes
LocalDate localDateStartDate = LocalDate.of(2016, 06, 10);
LocalDate localDateEndDate = LocalDate.of(2016,06,23);
long days = ChronoUnit.DAYS.between(localDateStartDate, localDateEndDate);