You can use following code:
public class DateUtils{
private static final DateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MMM-dd");
public static void main(String[] args){
try
{
Date beg = ((args.length > 0) ? DEFAULT_DATE_FORMAT.parse(args[0]) : new Date());
Date end = ((args.length > 1) ? DEFAULT_DATE_FORMAT.parse(args[1]) : new Date());
System.out.println("beg: " + DEFAULT_DATE_FORMAT.format(beg));
System.out.println("end: " + DEFAULT_DATE_FORMAT.format(end));
System.out.println("# days between: " + interval(beg, end, new IncludeAllDateRule(), Calendar.DATE));
System.out.println("# weekdays between: " + interval(beg, end, new ExcludeWeekendDateRule(), Calendar.DATE));
System.out.println("# hours between: " + interval(beg, end, new IncludeAllDateRule(), Calendar.HOUR));
System.out.println("# minutes between: " + interval(beg, end, new IncludeAllDateRule(), Calendar.MINUTE) );
}
catch (ParseException e)
{
e.printStackTrace();
}
}
public static int interval(Date beg, Date end, DateRule dateRule, int intervalType)
{
Calendar calendar = Calendar.getInstance();
calendar.setTime(beg);
int count = 0;
Date now = calendar.getTime();
while (now.before(end))
{
calendar.add(intervalType, 1);
now = calendar.getTime();
if (dateRule.include(now))
{
++count;
}
}
return count;
}
}
interface DateRule{
boolean include(Date d);
}
class ExcludeWeekendDateRule implements DateRule
{
public boolean include(Date d)
{
boolean include = true;
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if ((dayOfWeek == Calendar.SATURDAY) || (dayOfWeek == Calendar.SUNDAY))
include = false;
return include;
}
}
class IncludeAllDateRule implements DateRule
{
public boolean include(Date d)
{
return true;
}
}