Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取相对于正式营业时间的时差_Java - Fatal编程技术网

Java 如何获取相对于正式营业时间的时差

Java 如何获取相对于正式营业时间的时差,java,Java,我必须显示员工相对于正式工作时间的总工作时间。 若任务已启动,则在数据库中输入开始时间和结束时间 例如: start time= `2013-10-18 16:06:16.840` end time=`2013-10-22 16:09:09.760` 工作时间可根据组织进行配置 工作时间=7.45(7小时45分钟)=1天 如果有人工作时间比工作时间多,则考虑额外工作,并考虑加班时间。 我需要输出根据用户工作了一天。一天的产量 7.45 hour then 1 days 7.50 hour

我必须显示员工相对于正式工作时间的总工作时间。 若任务已启动,则在数据库中输入开始时间和结束时间

例如:

start time= `2013-10-18 16:06:16.840`
end time=`2013-10-22 16:09:09.760`
工作时间可根据组织进行配置

工作时间=
7.45(7小时45分钟)=1天

如果有人工作时间比工作时间多,则考虑额外工作,并考虑加班时间。

我需要输出根据用户工作了一天。一天的产量

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分钟


我还没有包含分钟逻辑,如何实现?我不知道。我对此感到困惑。

要获取两个日期之间经过的天数、分钟和秒数,可以执行以下操作:

    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;

但是我不知道它是否是您想要的。

为什么要使用
Long
作为您工作时间的数据类型?这样,您就失去了输入字符串的小数部分。如果您只有他在周五输入的时间和他今天离开的时间,您就无法计算他每天工作的小时数。@user2310289 for weekend我有不同的逻辑。@jeroen_de_schutter,正如我刚才提到的。还有一分钟,我还没有写任何代码。不要忘记对时区、夏令时、作为更正添加的额外秒数等进行一些处理。使用java.util.Date或calendar类时要小心。Java8中引入的新DateTime API比JDK中当前的日期API好得多