我能理解你的大体想法,不知道下面的代码能不能解决你的问题。
[code="java"]
/**
*
* @param inputDate 传给你的时间
* @return
/
public int convertDate(Date inputDate) {
Date nowDate = new Date();
// 不清楚你这个方法的查询逻辑是什么样的?
// 如果你输入的nowDate是2010年6月2日,数据库里有一个记录【开始时间6月1日,结束时间是6月3日,工作日】
// 那这条记录会包含到这个查询结果集吗?------->如果没有包括进去的话,34行--68行的代码能解决这个疏漏。
Collection wdList = new ArrayList();
int ret = 0;
for (Iterator iterator = wdList.iterator(); iterator.hasNext();) {
WorkDate workDate = (WorkDate) iterator.next();
if (workDate.getDateType().equals("工作日")) {
ret += getDays(workDate.getStartTime(), workDate.getEndTime()) * 8 * 60;
}
}
/********************解决疏漏的代码开始********************/
Calendar cal = Calendar.getInstance();
cal.setTime(nowDate);
//当前年份
int now_year = cal.get(Calendar.YEAR);
//当前月份
int now_month = cal.get(Calendar.MONTH) + 1;
//当前日期
int now_day = cal.get(Calendar.DATE);
//当前时间,24时制
int now_hour = cal.get(Calendar.HOUR_OF_DAY);
//当前分钟
int now_minute = cal.get(Calendar.MINUTE);
//查询你的基础表,查询条件是:nowDate>=开始时间 && nowDate<=结束时间的记录
Collection tmpList = new ArrayList();
for (Iterator iterator = tmpList.iterator(); iterator.hasNext();) {
WorkDate workDate = (WorkDate) iterator.next();
if (workDate.getDateType().equals("工作日")) {
//将当前日期的前一天设置到Calendar
cal.set(now_year, now_month - 1, now_day - 1);
Date yesterday = cal.getTime();
//计算从开始时间到昨天的工作分钟数
ret += getDays(workDate.getStartTime(), yesterday) * 8 * 60;
if (now_hour < 12) {
//12时前
ret += ((now_hour - 8) * 60 + now_minute);
} else if (now_hour >= 12 && now_hour
//中午休息时
ret += (4 * 60);
} else if (now_hour >= 14) {
//下午工作时间
ret += (4 * 60 + (now_hour - 12) * 60 + now_minute);
}
}
}
/*********************解决疏漏的代码结束********************/
return ret;
}
/**
* 从开始日期到结束日期总共有多少天。例如:从2010年3月1日到2010年3月2日,总共有2天。
*
* @param begin
* 开始日期
* @param end
* 结束日期
* @return
*/
private int getDays(Date begin, Date end) {
return Long
.valueOf(
((end.getTime() - begin.getTime() + 1000000) / (3600 * 24 * 1000)) + 1)
.intValue();
}
[/code]