2017-08-27 4 views
1

je fatigué en utilisant java.time.Period, et les résultats étaient différents de mes calculs manuels de trois jours. La chose étrange ici est quand je divise la période en deux périodes, les résultats correspondent à mes calculs manuels.java.time.Period, en divisant la période donne des résultats erronés

la seconde méthode est juste comme comment je calcule la période manuellement.

Y at-il quelque chose que j'ai raté? existe-t-il une méthode standard ou un algorithme d'arithmétique de calendrier? et quel est l'algorithme utilisé par java.time.Period?

import java.time.LocalDate; 
import java.time.Period; 
import java.time.temporal.ChronoUnit; 

public class test2 { 

    public static void main(String[] args) { 

     LocalDate d1 = LocalDate.of(2014, 2, 14); 
     LocalDate d2 = LocalDate.of(2017, 8, 1); 

     Period p = Period.between(d1, d2); 

     //using period between the two dates directly 
     System.out.println("period between " + d1.toString() + " and " + d2.toString() + " is " + p.getYears() 
       + " years " + p.getMonths() + " months " + p.getDays() + " Days"); 

     //dividing the period into two parts 
     p = Period.between(LocalDate.of(2014, 3, 1), d2); 

     System.out 
       .println("period between " + d1.toString() + " and " + d2.toString() + " is " + p.getYears() + " years " 
         + p.getMonths() + " months " + d1.until(LocalDate.of(2014, 3, 1), ChronoUnit.DAYS) + " Days"); 

    } 
} 
+1

Qu'essayez-vous exactement de faire? Quels résultats obtenez-vous? Quels résultats attendez-vous? – Dukeling

Répondre

1

Vous effectuez deux opérations différentes ici:

Period p = Period.between(d1, d2) 

vous donne un moyen de sortie bien formated la différence entre ces dates (vous avez utilisé les options de formatage correctement).

d1.until(d2, ChronoUnit.DAYS) 

vous donnera la même chose - mais pas si bien formated (fondamentalement, il vous donne juste le nombre de jours entre les LocalDates).

0

La réponse (période entre 14/02/2014 et 01/08/2017 est de 3 ans 5 mois 18 jours) est ce que vous devriez vous attendre:

  • il est 3 ans 2014-02-14-2017-02-14
  • il est 5 mois de 2017-02-14 à 2017-07-14
  • il est 18 jours de 2017-07-14 à 2017-08-01

Le calcul s'effectue d'années en mois en jours. Cela vous permet de calculer le nombre d'années, mois et jours entre 2014-02-14 et 2016-02-29, ce qui donne 2 ans et 15 jours.

Si vous essayez de calculer les jours d'abord vous avez des difficultés à déterminer le nombre d'années, mois et jours entre 2014-02-14 et 2016-02-29, parce qu'il n'y a pas de jour 2014-02-29 - 14 jours après 2014-02-14 ses 2014-02-28, 15 jours après 2014-02-14 son 2014-03-01.