2017-08-27 114 views
1

我厭倦了使用java.time.Period,結果與我手動計算的結果不同,爲3天。 這裏的奇怪的事情是,當我把時期分成兩個時期,結果與我的手工計算相匹配。java.time.Period,除期給出錯誤結果

第二種方法就像我如何手動計算時間段。

有什麼我錯過了?有沒有日曆算法的標準方法或算法?以及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

你究竟想要做什麼?你會得到什麼結果?你期望什麼結果? – Dukeling

回答

1

您在這裏執行兩種不同的操作:

Period p = Period.between(d1, d2) 

爲您提供了一個很好的格式化的方式輸出這些日期之間的差值(您正確使用的格式選項)。

d1.until(d2, ChronoUnit.DAYS) 

會給你相同的 - 但不是很好格式化(基本上它只是給你LocalDates之間的天數)。

0

答案(2014年2月14日和2017年8月1日之間的期限爲3年5個月18天)是你應該期望什麼:

  • 這是3年,由2014-02-142017-02-14
  • 它的500個月2017-02-142017-07-14
  • 它的18個天2017-07-142017-08-01

計算過程從幾年到幾個月到幾天。這允許您計算在2014-02-142016-02-29之間的年數,月數和天數,這可以給出2年和15天。

如果您嘗試計算天首先你必須確定2014-02-142016-02-29歲之間,月和日數的問題,因爲沒有一天2014-02-29有 - 2014-02-142014-03-012014-02-14後14天其2014-02-28,15天。