java.time.Period,除期给出错误结果
问题描述:
我厌倦了使用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");
}
}
答
您在这里执行两种不同的操作:
Period p = Period.between(d1, d2)
为您提供了一个很好的格式化的方式输出这些日期之间的差值(您正确使用的格式选项)。
d1.until(d2, ChronoUnit.DAYS)
会给你相同的 - 但不是很好格式化(基本上它只是给你LocalDates之间的天数)。
答
答案(2014年2月14日和2017年8月1日之间的期限为3年5个月18天)是你应该期望什么:
- 这是3年,由
2014-02-14
到2017-02-14
- 它的500个月
2017-02-14
到2017-07-14
- 它的18个天
2017-07-14
到2017-08-01
计算过程从几年到几个月到几天。这允许您计算在2014-02-14
和2016-02-29
之间的年数,月数和天数,这可以给出2年和15天。
如果您尝试计算天首先你必须确定2014-02-14
和2016-02-29
岁之间,月和日数的问题,因为没有一天2014-02-29
有 - 2014-02-14
其2014-03-01
后2014-02-14
后14天其2014-02-28
,15天。
你究竟想要做什么?你会得到什么结果?你期望什么结果? – Dukeling