我有两个日期:(YYYY-dd-mm)
1)1960年11月11日
2)1986年4月2日
我有以下功能,打算计算自仲裁日期起经过的月份,以上两项是我的测试条件。此函数计算月份而不考虑当前月份。这是一个月只有在整整一个月才会被添加。
功能是:
public static final int months(Date date1) {// tricky
Calendar calFirst = Calendar.getInstance();
calFirst.setTime(date1);
System.out.println(""+calFirst.getTime());
Calendar calNow = Calendar.getInstance();
calNow.setTime(getCurrentDate());
System.out.println(calNow.getTime());
int m2 = calNow.get(Calendar.YEAR) * 12 + calNow.get((Calendar.MONTH));
System.out.println(calNow.get(Calendar.YEAR) * 12 );
System.out.println(calNow.get(Calendar.MONTH));
//23832
int m1 = calFirst.get(Calendar.YEAR) * 12 + (calFirst.get(Calendar.MONTH));
System.out.println(calFirst.get(Calendar.YEAR) * 12 );
System.out.println(calFirst.get(Calendar.MONTH));
//24168
return Math.abs(m2 - (m1));
}
1986-04-02的结果:
Wed Apr 02 00:00:00 IST 1986
Wed Jan 08 00:00:00 IST 2014
24168
0
23832
3
333
哪个是正确的
1960-11-11的结果:
Fri Nov 11 00:00:00 IST 1960
Wed Jan 08 00:00:00 IST 2014
24168
0
23520
10
638
哪个错了。
我出错的任何提示?
答案 0 :(得分:1)
为什么不使用Joda Period
而不是讨论here:
Period p = new Period(from, to, PeriodType.months().withDaysRemoved());
int months = p.getMonths() + 1;
答案 1 :(得分:1)
我认为333和638都是很好的答案......
让我解释一下:
4月至1986年12月= 9个月+ 27个全年+ 2014年0个月= 333.
同样的想法适用于另一个:
11月包括到1960年12月= 2个月+ 53个全年+ 2014年0个月= 638.
这两个数字都是正确的:包括第一个月,上个月排除