JodaTime Рассчитать общее количество часов, отработанных за неделю

В настоящее время у меня есть функция, которая может принимать время начала и время окончания одного дня и вычислять разницу между ними, давая мне часы, отработанные за день. Что я хотел бы сделать, так это иметь возможность получить часы, отработанные в течение 7 дней, и вернуть общую сумму, оставаясь при этом в формате отображения (ЧЧ: мм).

Моя функция для одного дня:

Period p = new Period(this.startTime[dayIndex], this.endTime[dayIndex]);
long hours = p.getHours();
long minutes = p.getMinutes();

String format = String.format("%%0%dd", 2);//Ensures that the minutes will always display as two digits.

return Long.toString(hours)+":"+String.format(format, minutes);

this.startTime[] и this.endTime[] являются массивами объектов DateTime.

Какие-либо предложения?


person clang1234    schedule 21.01.2010    source источник


Ответы (3)


Вам понадобится что-то, чтобы удерживать недельные дни и вызывать вашу функцию один раз в каждый день.

Но это означает, что вы захотите провести рефакторинг, чтобы ваш метод калькулятора не форматировался как строка, а вместо этого возвращал числовое значение, чтобы вы могли легко складывать их вместе.

person CPerkins    schedule 21.01.2010

Еще одно простое решение:

Вот метод, который получает часы и минуты отдельно.
Параметры:

  • Время начала
  • Стартовые минуты
  • Конечный час
  • Конечные минуты

сначала вычислите разницу между часами и минутами отдельно:

int hours   = pEndHour - pStartHour;
int minutes = ((60 - pStartMinutes) + pEndMinutes) - 60;

затем проверяет, является ли значение переменной «минуты» отрицательным:

// If so, the "negative" value of minutes is our remnant to the next hour
 if (minutes < 0) {
  hours--;
  minutes = 60 + minutes ;
 }

Наконец, вы можете распечатать период времени в часовом формате:

String format = String.format("%%0%dd", 2);
System.out.println( "*** " + hours + " : " + minutes);

Это все.

person marcello    schedule 26.05.2011

Решение, которым я закончил для тех, кто заинтересован

    Period[] p=new Period[7];
    long hours = 0;
    long minutes =0;
    for(int x=0; x<=this.daysEntered;x++)
    {
        p[x] = new Period(this.startTime[x], this.endTime[x]);
        hours += p[x].getHours();
        minutes += p[x].getMinutes();
    }

    hours += minutes/60;
    minutes=minutes%60;

    String format = String.format("%%0%dd", 2);

    return Long.toString(hours)+":"+String.format(format, minutes);
person clang1234    schedule 14.06.2010