4

两个不同的代码片段(有微小的变化)在 joda time api 的计算中显示了一些错误:

第一个:给出正确的结果

DateTime date1 = new DateTime(2010,1,5, 0, 0, 0, 0);
DateTime date2 = new DateTime(2012,6,11, 0, 0, 0, 0);
Period age =new  Period(date1,date2);
System.out.println(age.getYears()+" years "+age.getMonths()+" months "+age.getDays()+" days");

给出结果: 2 years 5 months 6 days

第二个:给出不正确的结果

代码段更改: DateTime date2 = new DateTime(2012,6, 12 , 0, 0, 0, 0);

DateTime date1 = new DateTime(2010,1,5, 0, 0, 0, 0);
DateTime date2 = new DateTime(2012,6,12, 0, 0, 0, 0);
Period age =new  Period(date1,date2);
System.out.println(age.getYears()+" years "+age.getMonths()+" months "+age.getDays()+" days");

给出结果: 2 years 5 months 0 days

这是计算错误还是我缺少一些配置?

4

2 回答 2

4

我相信这是因为 7 天现在是 1 周。发生的情况是,将始终使用封装剩余部分的最大可能时间值。

IE 如果你有 8 天,这是 1 周 1 天。如果您有 294 天(取决于开始日期),则为 1 年、1 个月、1 周和 1 天。ETC...

所以你需要的是这样的:

System.out.println(age.getYears()+"年"+age.getMonths()+"月"+(age.getWeeks()*7+age.getDays())+"天");

于 2012-06-27T12:42:56.057 回答
3

发生的事情是你已经滚动了一周。我想如果你尝试“2012,6,13,0,0,0,0”作为你的输入,你会得到一个...1 days结果。

添加调用以getWeeks使您的输出更清晰。将您的 println 更改为:

System.out.println(age.getYears()+" years "+age.getMonths()+" months "+age.getWeeks()+" weeks "  + age.getDays()+" days");
于 2012-06-27T12:40:09.347 回答