急求一个时间的比较计算方法

要提供一个方法,有一个参数,date类型
然后提取当前的数据库时间。比较两个两个date数据之间的分钟差!

比较规则:
1:数据库有一张基础信息表,是用于保存是否工作日以及开始和结束时间的
表结构:
编号 类型 开始时间 结束时间
id datetype startTime endTime

添加信息如:1,”工作日“, ”27-5月 -10 02.46.38.593000 上午“, ”28-5月 -10 06.00.00.000000 下午“
2,”非工作日“, ”29-5月 -10 02.46.38.593000 上午“, ”30-5月 -10 06.00.00.000000 下午“
3,”工作日“, ”31-5月 -10 02.46.38.593000 上午“, ”4-6月 -10 06.00.00.000000 下午“

比如现在将要传给我一个时间是2010年5月28日10:00:00 ,我取得当前的数据库时间是2010年6月1日15:00:00
返回两个时间中间经历的工作日分钟数。每天按8小时正常工作时计算。从8:00--12:00,14:00--18:00;

比较的时候只计算两个时间中间的工作日的分钟数

请各位各位帮忙解决下。小弟谢谢了

我能理解你的大体想法,不知道下面的代码能不能解决你的问题。
[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]

/**
* 获取两个时间datetime1-datetime2差的long型数组,按索引依次为天,时,分,秒
* @param datetime1 时间字符串
* @param datetime2 时间字符串
* @return 返回一个长度为4的long数组,按索引依次为天,时,分,秒
*/
public static long[] getTimesInterval(String datetime1,String datetime2){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long[] interval=new long[4];
try {
Date now = df.parse(datetime1);
Date date=df.parse(datetime2);
long l=now.getTime()-date.getTime();
long day=l/(24*60*60*1000);
interval[0]=day;
long hour=(l/(60*60*1000)-day*24);
interval[1]=hour;
long min=((l/(60*1000))-day*24*60-hour*60);
interval[2]=min;
long s=(l/1000-day*24*60*60-hour*60*60-min*60);
interval[3]=s;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return interval;
}

我想知道你数据库中 startTime endTime 有没有固定格式,什么含义

[quote]就是数据库的date类型,看到的就是这种效果 [/quote]
什么数据库date类型数据是这个格式啊?数据不都是你自己插进去的啊?

没用过TIMESTAMP类型,给你个思路自己解决吧,还是用上面我给你的那个方法,查询出datetype=‘工作日’ startTime>输入日 endTime <当前日 的数据
然后遍历结果,调用我那个方法,统计期间每天的工作时间,然后查出输入日的结束时间,再调方法,同理查出今天的工作时间

仔细看看Timestamp、Calendar的API,应该都能解决的。 :wink: