web-dev-qa-db-fra.com

Comment calculer le nombre de jours dans une période?

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à.

39
M.K.

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 classe Period fournit diverses méthodes get, telles que getMonths, getDays et getYears. Pour présenter la quantité> de temps mesurée dans une seule unité de temps, comme des jours, vous pouvez utiliser le ChronoUnit.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)
74
Saket Mittal

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.

17
K Erlandsson

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);
5
Ualter Jr.