2013-10-23 34 views
0

我必须显示员工相对于正式营业时间的总工作时间。 如果任务已启动,则输入数据库的开始时间和结束时间。如何获得相对于正式营业时间的时差

输入类似:

start time= `2013-10-18 16:06:16.840` 
end time=`2013-10-22 16:09:09.760` 

工作时间可配置为每个组织。

工时=7.45 (7 hour and 45 minutes) =1 day

如果有人工作更多然后工时,它考虑下额外的工作,并考虑作为额外的时间。

我需要根据用户工作一天的输出。输出一天如

7.45 hour then 1 days 
7.50 hour then 1 days and 5 minute 
14.50 hour then 1 days, 7 hour and 5 minutes 

我已经完成了下面的编码。这并不像我期望的那样令人满意。

我做了什么:

1) take difference of two days 
2) instead of using 24 hour, I used business hour. 

代码:

public static long[] getTimeDifference(Date d1,Date d2,int holiday,String businessHour) 
    { 
    long hour=0; 
    if(businessHour.indexOf(".")!=-1) 
    { 
    hour=Long.valueOf(businessHour.substring(0,businessHour.indexOf(".")));///check for hour 
    } 
    else 
    { 
    hour=Long.valueOf(businessHour); 
    } 
    long[] time=new long[3]; 
    long diff = d2.getTime() - d1.getTime(); 

    //double diffSeconds = diff/1000 % 60; 
    long diffMinutes = diff/(60 * 1000) % 60; 
    long diffHours = (diff/(60 * 60 * 1000) % hour); 
    long diffDays = (diff/(hour * 60 * 60 * 1000)); 
    diffDays=diffDays-holiday; 
    time[0]=diffDays; 
    time[1]=diffHours; 
    time[2]=diffMinutes; 

    return time; 
    } 

输出: 11天:05时间:02分钟

我不包括分钟逻辑还,我该如何执行?我不知道。我对此感到困惑。

+0

周末怎么样? –

+0

为什么在工作时间使用'Long'作为数据类型?这样你就会丢失输入字符串的小数部分。 –

+1

如果你只有周五的时间和他今天离开的时间,你无法计算他每天工作多少个小时。 – luanjot

回答

0

为了让那些两个日期之间的日子一天天过去,分钟和秒,你可以这样做:

long hour = 0; 
    if (businessHour.indexOf(".") != -1) { 
     hour = Long.valueOf(businessHour.substring(0, 
      businessHour.indexOf(".")));// /check for hour 
    } else { 
     hour = Long.valueOf(businessHour); 
    } 
    long[] time = new long[3]; 
    long diff = d2.getTime() - d1.getTime(); 

    // double diffSeconds = diff/1000 % 60; 

    double diffDays = (diff/(24 * 60 * 60 * 1000)); 
    double diffHours = (diff/(60 * 60 * 1000)) - diffDays*24; 
    double diffMinutes = diff/(60 * 1000) - (diffDays*24 + diffHours) * 60; 

    time[0] = diffDays; 
    time[1] = diffHours; 
    time[2] = diffMinutes; 

但我不知道这是否是你想要的。