我有两个日期:(YYYY-dd-mm)
1)1960-11-11
2)1986-04-02
我有以下函数,旨在计算自任意日期以来经过的月份,以上两个是我的测试条件。此函数计算月份而不考虑当前月份。也就是说,只有在完整的一个月后才添加一个月。
功能是:
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
哪个是错误的。
有什么提示我哪里出错了吗?
最佳答案
我认为 333 和 638 都是很好的答案...
让我解释一下:
包括 1986 年 4 月至 12 月 = 9 个月 + 27 年 + 2014 年 0 个月 = 333。
同样的想法也适用于其他:
包含 1960 年 11 月至 12 月 = 2 个月 + 53 年 + 2014 年 0 个月 = 638。
从这个角度来看,这两个数字都是正确的:包括第一个月,排除上个月
关于java - 几个月过去了的功能没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992496/