Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: clang1234Ответов: 3

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

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

javajodatime

Ответы

Ответ 1 · рейтинг 1 · CPerkins

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

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

Ответ 2 · рейтинг 1 · marcello

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

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

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

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

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

Это все.

Ответ 3 · clang1234

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы