Sorry, i've tried to code for date Months
and Days
remaining, unfortunately i get the wrong result. Any helps would be appreciated. Thanks!
SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String sdate = "08-02-2016";
String edate = "02-02-2017";
Date startdate = formatter.parse(sdate);
Date enddate = formatter.parse(eddate );
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startdate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(enddate);
int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); //effdate - currdate
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) -startCalendar.get(Calendar.MONTH);
int diffDay= endCalendar.get(Calendar.DAY_OF_MONTH) -startCalendar.get(Calendar.DAY_OF_MONTH);
Expected result : 11 months, 25 days
P/s : JodaTime not applicable.
I would strongly advice you to use a robust api for reliable result, but if you insist of doing it manually, try with the following, it seems giving the correct result(at least for your test case):
SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String CURRDATE = "08-02-2016";
String EFFDATE = "02-02-2017";
Date startdate = formatter.parse(CURRDATE);
Date enddate = formatter.parse(EFFDATE);
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startdate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(enddate);
int monthCount = 0;
int firstDayInFirstMonth = startCalendar.get(Calendar.DAY_OF_MONTH);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
endCalendar.add(Calendar.DAY_OF_YEAR, -firstDayInFirstMonth+1);
while (!startCalendar.after(endCalendar)) {
startCalendar.add(Calendar.MONTH, 1);
++monthCount;
}
startCalendar.add(Calendar.MONTH, -1); --monthCount;
int remainingDays = 0;
while (!startCalendar.after(endCalendar)) {
startCalendar.add(Calendar.DAY_OF_YEAR, 1);
++remainingDays;
}
startCalendar.add(Calendar.DAY_OF_YEAR, -1);
--remainingDays;
int lastMonthMaxDays = endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
if (remainingDays >= lastMonthMaxDays) {
++monthCount;
remainingDays -= lastMonthMaxDays;
}
int diffMonth = monthCount;
int diffDay = remainingDays;
System.out.println("diffMonth==="+diffMonth +" Month(s) and " + diffDay + " Day(s)");