公司上班时间为08:30,下班时间为17:30
周六周日休息某人请假从2005-12-05 16:30:00到2005-12-13 08:30:00请假
正确的请假天数和时间结果应该是5天1小时我如何通过两个日期值比较最终去除周六周日和他私人时间再加上12月05日提前一小时下班得出最终结果啊。

解决方案 »

  1.   

    我的思路:
    1:计算出两个日期(去掉时间)间除去周末的天数;d1
    2:计算开始日期这一天的上班时间;t1
    3:计算结束日期这一天的请假时间;t2
    4:总的请假时间=
    if (t1 > t2)
    {
      return (d1-1)天 (9+t2-t1)小时
    }
    else
    {
      return d1天 (t2-t1)小时
    }
      

  2.   

    建议你用这样的方法:从请假开始的日期开始扫描,直到假期结束的那天。
    判断每天的小时分钟,甚至秒数。
    周六周日算0秒。
    得到请假的总秒数。换算成天、时、分、秒。程序:
    int 请假总秒数 = 0;
    Date 开始日期 = 请假开始的日期;
    while( !请假结束的日期之后了 )
    {
       if(!是周末)
       {
          请假总秒数 += 当前的请假秒数;
       }   日期往后推一天;
    }
    换算(请假总秒数);
      

  3.   

    请假从2005-12-06 08:30:00到2005-12-13 09:30:00
    这个本应该是5天1小时,但是按照susu_0807(苏苏)是不对的。
      

  4.   

    <%@page contentType="text/html;charset=GB2312"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><%@page import="java.util.*" %>
    <%
        Date date1 = new Date(2005,12,5);
        Date date2 = new Date(2005,12,13);
        long day = (date2.getTime()-date1.getTime())/1000/86400+1;
        if(day>7){
            day = day-day/7*2;
        }
        
         //8:30-17:30,转化为分钟,*60
        long time1 = 510;                   //8*60+30
        long time2 = 1050;
        long time_begin =  990;
        long time_end =  510;
        long time_purl =  0;
        if(time_begin>time1 && time_begin<time2){
            time_purl = (time2 - time_begin)/60  ; 
            day=day-1;
        }
        if(time_end>time1 && time_end<time2){
            time_purl = +(time2 - time_begin)/60 ; 
            day=day-1;
        }else if(time_end<=time1){
            day=day-1;
        }
        
        out.println(day+"天"+time_purl+"小时");
    %>
      

  5.   

    建议1、计算请假天数;for(请假的第二日 到 结束的前一起){
      if(请假日!=周末){
        请假天数++;
       }
    }2、计算时、分、秒
    计算请假当天请假 N秒;
    计算返工当天 M秒;3、相加
      

  6.   

    java.util.date中有一个getDay()方法,这个方法可以得到星期几。
    通过这个方法你可以过滤掉周末,剩下的就是对工作时间的判断了。你可以对打卡的时间formatte一下,以yyyy-mm-dd hh:mm:ss的形式保存
    过滤掉周末后就是判断hh:mm:ss是否在工作时间区间的问题了。
    应该不会很难
      

  7.   

    楼主没有发现我在上面回复的方法是很灵活的吗?int 请假总秒数 = 0;
    Date 开始日期 = 请假开始的日期;
    while( !请假结束的日期之后了 )
    {
       if(!是周末)
       {
          请假总秒数 += 当天的请假秒数(被计算的那天);
       }   日期往后推一天;
    }
    换算(请假总秒数);
    =============================
    当天的请假秒数(被计算的那天);是个方法,可以实现很复杂的逻辑。
    包括节假日,甚至是农历的节假日也能算。
    通常,只要计算一个月的1号到该月的最后一天就可以得知该月的请假时间了。
      

  8.   

    to susu_0807(苏苏) 2005-12-05 16:40:00 - 2005-12-12 17:30
    得出的请假结果应该是5天50分钟,而您的结果是5天1小时