To setup holidays navigate to : Administrative setup > Company Profile > Holidays
public Integer calculateWorkingDaysBetweenTwoDates(Date date1,Date date2){
List<Holiday> holidays=[Select h.StartTimeInMinutes, h.Name, h.ActivityDate From Holiday h];
Integer allDaysBetween = date1.daysBetween(date2);
Integer allWorkingDays=0;
for(Integer k=0;k<allDaysBetween ;k++ ){
if(checkifItisWorkingDay(date1.addDays(k),holidays)){
allWorkingDays++;
}
}
return allWorkingDays;
}
public boolean checkifItisWorkingDay(Date currentDate,List<Holiday> holidays){
Date weekStart = currentDate.toStartofWeek();
for(Holiday hDay:holidays){
if(currentDate.daysBetween(hDay.ActivityDate) == 0){
return false;
}
}
if(weekStart.daysBetween(currentDate) ==0 || weekStart.daysBetween(currentDate) == 6){
return false;
} else
return true;
}
http://sfdcdev.wordpress.com/2011/09/24/handling-holidays-in-salesforce-apex/