I am trying to calculate difference between two date strings both of which are taken from user through a html form in format (yyyy/MM/dd)
Code:
public boolean diffDate() throws ParseException
{
date1 = getissuedate();
date2 = getduedate();
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy/MM/dd");
Date date_old = formatter1.parse(date1);
Date date_new = formatter2.parse(date2);
long milis1 = date_old.getTime();
long milis2 = date_new.getTime();
long diff = milis2 - milis1;
if( diff<3 || diff>3)
{
return true;
}
else
{
return false;
}
}
Now am using an if condition to report error in my webpage if difference between the date is not equal to 3.
Code:
try {
if(diffDate())
{
errors.add("duedate", new ActionMessage("error.duedate.required"));
}
} catch (ParseException ex) {
Logger.getLogger(IssueBookForm.class.getName()).log(Level.SEVERE, null, ex);
}
where error.duedate.required is mapped to “check date”
So, the issue is “check date” error is printed for any value of both date string.
you’ll never get a difference of exactly 3 milliseconds between two dates gotten from a yyyy/MM/dd formatted string (maximum accuracy will be 24 hours)
if you want 3 days difference use
24*60*60*1000for a factor to scale the values