Наследование и бросающий в Java

Итак, ваша проблема заключалась в использовании объекта dateinterval для получения разницы во времени. Но к ним вы просто добавляете часы и минуты, но это «база 60» (как 60 минут за 1 час), поэтому вы не можете сложить их с +.

Пример : 1 час 15 минут (1.15) плюс 1 час 45 минут (1.45) - это 2.6 численно, но 3 часа (по данным вашего комментария).

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

function convertToDecimal($hours) {
    $parts = explode('.', (string)$hours);
    $min = (count($parts) == 2) ? $parts[1] / 60 : 0;
    return $parts[0] + $min;
}

при вызове convertToDecimal(1.15) вернет 1.25. добавьте, что вы уменьшаете функцию следующим образом:

carry[$item["recruiter"]] += convertToDecimal($item["hours"]);

Подсказка - правильно задать вопрос - непростая задача - теперь, когда у вас есть решение, попробуйте отредактировать свой вопрос, чтобы он включал все (и только ]) данные, необходимые для понимания вашей проблемы и ее воспроизведения.

Лучшее решение включает изменение способа извлечения разницы во времени. Рассмотрим следующий метод:

$shiftStartTime = "2019-01-11T07:00:00";
$shiftEndTime = "2019-01-11T15:15:00";

$startLong = (new DateTime($shiftStartTime))->getTimestamp();
$endLong = (new DateTime($shiftEndTime))->getTimestamp();;

echo ($endLong - $startLong) / (60 * 60);

Это даст вам 8.25 при подсчете секунды и без установки часов с помощью DateInterval.

Надеюсь, это поможет!

5
задан Enamul Hassan 19 July 2015 в 19:43
поделиться

3 ответа

Я полагаю, что Вы не можете на самом деле переопределить переменные в Java. Подкласс на самом деле 'скрывает' переменную var.

Когда Вы бросаете к Automobile, Вы получаете версию суперкласса var переменная. Однако toString() метод все еще смотрит на версию экземпляра var переменная.

Если Вы удалили public int var от подкласса Porsche это должно работать как ожидалось.

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

16
ответ дан 18 December 2019 в 06:36
поделиться

Затенение переменной var.

Ваш Porche.var другая переменная, чем Automobile.var.

Porsche.toString() метод использует Porsche.var, тогда как состав исполнителей говорит компилятору использовать Automobile версия.

5
ответ дан 18 December 2019 в 06:36
поделиться

Доступ к полям не является полиморфным - он зависит только от типа времени компиляции выражения.

Выражение ((Автомобиль) p) имеет время компиляции, вводит Автомобиль, таким образом, его поля используются.

2
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: