JodaTime Рассчитать общее количество часов, отработанных за неделю - PullRequest
0 голосов
/ 21 января 2010

В настоящее время у меня есть функция, которая может принимать время начала и окончания одного дня и вычислять разницу между ними, давая мне часы, отработанные в течение дня. То, что я хотел бы сделать, это иметь возможность отработать часы в течение 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.

Есть предложения?

Ответы [ 3 ]

1 голос
/ 26 мая 2011

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

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

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

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

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

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

// 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);

Вот и все.

1 голос
/ 21 января 2010

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

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

0 голосов
/ 14 июня 2010

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

    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);
...