【问题标题】:How to get time difference relative to official business hour如何获得相对于正式营业时间的时差
【发布时间】:2013-10-23 08:43:41
【问题描述】:

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

输入类似:

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

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

【问题讨论】:

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

标签: java


【解决方案1】:

要获取两个日期之间经过的天数、分钟数和秒数,您可以这样做:

    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;

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

【讨论】:

    猜你喜欢
    • 2021-07-15
    • 2020-08-11
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多