2017-08-27 113 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天。