yijay555 2010-06-01 15:22
浏览 272
已采纳

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

要提供一个方法,有一个参数,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;

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

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

  • 写回答

6条回答 默认 最新

  • 陪公主读书 2010-06-02 01:19
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝