两个不同的代码片段(略有变化)在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
这是计算错误还是我错过了一些配置?
答案 0 :(得分:4)
我相信这是因为7天现在是1周。会发生的是,将始终使用封装剩余部分的最大可能时间值。
即。如果您有8天,则为1周1天。如果您有294天(取决于开始日期),则为1年,1个月,1周和1天。等...
所以你需要的是:
System.out.println(age.getYears()+“years”+ age.getMonths()+“months”+(age.getWeeks()* 7 + age.getDays())+“days”);
答案 1 :(得分: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");