经过几个月的功能没有给出正确的结果

时间:2014-01-08 10:08:48

标签: java

我有两个日期:(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

哪个错了。

我出错的任何提示?

Benchmark

2 个答案:

答案 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.

这两个数字都是正确的:包括第一个月,上个月排除