2017-08-27 5 views
1

Ich müde mit java.time.Period, und die Ergebnisse waren anders als meine manuellen Berechnungen von drei Tagen. Das komische Ding hier ist, wenn ich die Periode in zwei Perioden teile, stimmen die Ergebnisse mit meinen manuellen Berechnungen überein.java.time.Period, die Teilung der Zeitraum gibt falsche Ergebnisse

die zweite Methode ist genau wie ich die Periode manuell berechnen.

Gibt es etwas, was ich vermisst habe? Gibt es eine Standardmethode oder einen Kalenderalgorithmus? und was ist der von java.time.Period verwendete Algorithmus?

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

Was genau möchten Sie tun? Welche Ergebnisse bekommst du? Welche Ergebnisse erwarten Sie? – Dukeling

Antwort

1

Sie führen zwei verschiedene Operationen hier:

Period p = Period.between(d1, d2) 

gibt Ihnen eine schön formated Möglichkeit, den Unterschied zwischen diesen Daten ausgeben (Sie die Formatierungsoptionen korrekt verwendet haben).

d1.until(d2, ChronoUnit.DAYS) 

erhalten Ihnen die gleiche geben - aber nicht so schön formated (im Grunde gibt es Ihnen nur die Anzahl der Tage zwischen dem LocalDates).

0

Die Antwort (Zeitraum zwischen 2014.02.14 und 2017.08.01 beträgt 3 Jahre 5 Monate 18 Tage) ist das, was Sie erwarten sollten:

  • es ist 3 Jahre 2014-02-14-2017-02-14
  • es ist 5 Monate 2017-02-14-2017-07-14
  • es 18 Tage 2017-07-14-2017-08-01

Die Berechnung läuft von Jahren zu Monaten bis Tagen. Auf diese Weise können Sie die Anzahl der Jahre, Monate und Tage zwischen 2014-02-14 und 2016-02-29 berechnen, was 2 Jahre und 15 Tage ergibt.

Wenn Sie versuchen, die Tage zu berechnen zuerst haben Sie Probleme, die Anzahl der Jahre, Monate und Tage zwischen 2014-02-14 und 2016-02-29 Bestimmung, weil es keinen Tag 2014-02-29 - 14 Tage nach 2014-02-14 seine 2014-02-28, 15 Tage nach 2014-02-14 seiner 2014-03-01.

Verwandte Themen