java中时间间隔小时计算

计算两个时间间隔小时且不包括周末,每天8小时,eg 2015-05-10 10:00:00
2015-05-20 16:00:00 要算出这两个时间相差的小时数而且不包括周末时间,其他时间一天8小时计算
并且 10:00 到18点,9点到16点这两个时间点也要计算上,该怎么写

之前的代码确实有问题,现在做了修改。
package aaa;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CalculateHours {
//该处时间可以根据实际情况进行调整
int ab = 8;//上午上班时间
int ae = 12;//下午下班时间
int pb = 13;//下午上班时间
int pe = 17;//下午下班时间
int hoursPerDay = ae-ab+pe-pb;//每天上班小时数
int daysPerWeek = 5;//每周工作天数
long milsecPerDay = 1000*60*60*24;//每天的毫秒数
int hoursPerWeek = hoursPerDay*daysPerWeek;//每星期小时数

public int calculateHours(String beginTime, String endTime){

    Date t1 = stringToDate(beginTime);//真实开始时间
    Date t2 = stringToDate(endTime);//真实结束时间
    if(t1.getTime()>t2.getTime())
        return -1;
    if(t1.getYear()==t2.getYear()&&t1.getMonth()==t2.getMonth()&&t1.getDate()==t2.getDate()){
        if(t2.getHours()<=ab||t1.getHours()>pe||(t1.getHours()>=ae&&t2.getHours()<=pb)){
            return 0;
        }
        if(t1.getHours()<=ab){
            return calculateHoursInOneDay2(t2.getHours());
        }
        if(t2.getHours()>=pe){
            return calculateHoursInOneDay(t1.getHours());
        }
        if(t2.getHours()<=ae||t1.getHours()>=pb){
            return t2.getHours() - t1.getHours();
        }
        if(t1.getHours()<=ae&&t2.getHours()>=pb){
            return t2.getHours()-t1.getHours()-(pb-ae);
        }
        if(t2.getHours()<=pb){
            return ae-t1.getHours();
        }
        return t2.getHours()-pb;
    }
    //开始时间当天,上午上班时间
    Date temp1 = new Date(t1.getYear(),t1.getMonth(),t1.getDate(),ab,0);
    //结束时间当天,上午上班时间
    Date temp2 = new Date(t2.getYear(),t2.getMonth(),t2.getDate(),ab,0);

    Date sunday1;//晚于开始时间的最近的星期天
    Date sunday2;//早于结束时间的最近星期天

    sunday1 = new Date(temp1.getTime()+(7-temp1.getDay())*milsecPerDay);
    sunday2 = new Date(temp2.getTime()-temp2.getDay()*milsecPerDay);

    long weeks = (sunday2.getTime()-sunday1.getTime())/(milsecPerDay*7);

    int hour1 = 0;//第一周剩余的小时数
    int hour2 = 0;//最后一周剩余的小时数
    int hour3 = 0;//中间的小时数

    hour3 = (int) (weeks * hoursPerWeek);

    if(t1.getDay()==0||t1.getDay()==6){
        hour1 = hoursPerWeek;
    }else{
        hour1 += (5-t1.getDay())*hoursPerDay;
        hour1 += calculateHoursInOneDay(t1.getHours());
    }

    if(t2.getDay()==0){
        hour2 = 0;
    }else{
        hour2 += (t2.getDay()-1)*hoursPerDay;
        if(t2.getDay()!=6){
            hour2 += calculateHoursInOneDay2(t2.getHours());
        }
    }

    System.out.println(t1);
    System.out.println(t2);
    System.out.println(weeks);
    int hours = hour1 + hour2 + hour3;
    System.out.println(hours);
    return hours;
}

/**
 * 计算一天内的工作时间
 * @param hour 当天的时刻,开始时间
 * @return
 */
private int calculateHoursInOneDay(int hour) {
    if(hour>=pe)
        return 0;
    if(hour>=pb)
        return pe-hour;
    if(hour>ae)
        return pe-pb;
    if(hour>ab)
        return ae-hour+pe-pb;
    return 0;
}

/**
 * 计算一天内的工作时间
 * @param hour 当天的时刻,结束时间
 * @return
 */
private int calculateHoursInOneDay2(int hour) {
    if(hour>=pe)
        return hoursPerDay;
    if(hour>=pb)
        return ae-ab+hour-pb;
    if(hour>ae)
        return ae-ab;
    if(hour>ab)
        return hour-ab;
    return 0;
}

/**
 * 将字符串形式的时间转换成Date形式的时间
 * @param time
 * @return
 */
private Date stringToDate(String time){
    SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置 
    try {
        return format.parse(time);
    } catch (ParseException e) {
        e.printStackTrace();
        return null;
    }
}

}
这样应该可以了

http://www.tuicool.com/articles/nQzE32

js版实现

http://blog.csdn.net/jiajia333666/article/details/48026695
我实现了一个,应该能满足你的需求,如有疑惑可联系425850693@qq.com

String d1="2015-08-16 10:00:00";
String d2="2015-08-16 16:00:00";不对啊,当天工作时间他是计算不出来的

用Calendar类实现。