检查并计算晚上的工作时间

时间:2015-08-18 18:30:14

标签: java jodatime

我正在编写一种将开始时间和结束时间作为参数的方法。此方法将检查并返回晚上工作时间(从18:006:00)。

我的解决方案只是从开始到结束循环运行,如果begin等于或大于18:00,则计数器将递增1:

public static float CheckIfEveningWork(DateTime begin, DateTime end) {
    float eveningWorkDuration = 0;

    if (begin.getHourOfDay() > end.getHourOfDay()) {
        end = end.plusHours(24);
        for (float a=begin.getHourOfDay(); a<= end.getHourOfDay();a++) {
            if ((a>=18)||(a<=6)) {
                eveningWorkDuration++;
            }
        }
    } else {
        for (float a=begin.getHourOfDay(); a<= end.getHourOfDay();a++) {
            if ((a>=18)||(a<=6)) {
                eveningWorkDuration++;
            }
        }
    }
    System.out.println(end.getHourOfDay());
    return eveningWorkDuration;
}

当我用

测试这个方法时
begin = 17:00
end = 2:00

它返回0。但是当我尝试时:

begin = 17:00
end = 20:00

它返回了3

我在解决这个问题时遇到了什么问题?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你关注的是0值,是吗?不符合for语句的条件:a = begin.getHourOfDay(),这里是17。但 a <= end.getHourOfDay()的条件为false,for循环退出,结果为0。

你必须更仔细地考虑角落的情况。

要进行扩展,如果是begin.getHourOfDay()&gt; end.getHourOfDay(),然后你必须从begin.getHourOfDay()迭代到23和0到end.getHourOfDay()。

请改为尝试:

public static float CheckIfEveningWork(DateTime begin, DateTime end) {
    float eveningWorkDuration = 0;
    float beginHour = begin.getHourOfDay();
    float endHour = end.getHourOfDay();

    if (beginHour < endHour) {
        for (float a=beginHour; a<= endHour; a++) {
            if ((a>=18)||(a<=6)) {
                eveningWorkDuration++;
            }
        }
    } else {
        endHour = endHour + 24;
        for (float a=beginHour; a<= endHour; a++) {
            if ((a>=18)||(a<=6)) {
                eveningWorkDuration++;
            }
        }
    }
    System.out.println(end.getHourOfDay());
    return eveningWorkDuration;
}