I have a start date and end date. the duration between the 2 dates should be in the form of years, months and days. I am new to java. When I run the below method the out I get is 0 years, 12 months 1 days. Please suggest an alternative to get accurate difference in years, months and days.
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Duration {
private String getAssignmentDuration(java.util.Date oldDate, java.util.Date newDate) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
if (oldDate.compareTo(newDate) > 0) {
c1.setTime(newDate);
c2.setTime(oldDate);
} else {
System.out.println("invalid");
return "Invalid selection";
}
int year = 0;
int month = 0;
int days = 0;
boolean doneMonth = false;
boolean doneYears = false;
while (c1.before(c2)) {
//log.debug("Still in Loop");
if (!doneYears) {
c1.add(Calendar.YEAR, 1);
year++;
}
if (c1.after(c2) || doneYears) {
if (!doneYears) {
doneYears = true;
year--;
c1.add(Calendar.YEAR, -1);
}
if (!doneMonth) {
c1.add(Calendar.MONTH, 1);
month++;
}
if (c1.after(c2) || doneMonth) {
if (!doneMonth) {
doneMonth = true;
month--;
c1.add(Calendar.MONTH, -1);
}
c1.add(Calendar.DATE, 1);
days++;
if (c1.after(c2)) {
days--;
}
// this will not be executed
if (days == 31 || month==12) {
break;
}
}
}
}
System.out.println(year + " years, " + month + " months, " + days + " days");
return year + " years, " + month + " months, " + days + " days";
}
public static void main(String[] args) {
Duration d1= new Duration();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
java.util.Date oldDate = null;
try {
oldDate = sdf.parse("2012/08/29");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
java.util.Date newDate = null;
try {
newDate = sdf.parse("2013/08/31");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
d1.getAssignmentDuration(oldDate, newDate);
}
}