Как рассчитать числовую разницу между двумя длительностью в Java (с использованием библиотеки mpxj)?

Например, я хочу рассчитать разницу в продолжительности между двумя действиями. Действие 1 длится 13 дней. Действие 2 имеет продолжительность 5 дней. Я знаю, что Microsoft Project испытывает трудности при выполнении операций с длительностью. Заранее спасибо!

Необходимый ответ: 13-5 = 8 Идеальный ответ: 8 дней


person Andre Davis    schedule 17.01.2018    source источник
comment
Непонятно, в чем ваш вопрос. Вы спрашиваете, как вычесть одно число из другого? Это может помочь, если вы разместите код.   -  person shmosel    schedule 18.01.2018
comment
Это вычитание 1 длительности из другой. Вы не можете выполнить прямое вычисление с переменными продолжительности.   -  person Andre Davis    schedule 18.01.2018
comment
Какой это класс?   -  person shmosel    schedule 18.01.2018


Ответы (1)


Если ваши длительности имеют одинаковые единицы времени, вы можете выполнить простое вычитание:

Duration d1 = Duration.getInstance(13, TimeUnit.DAYS);
Duration d2 = Duration.getInstance(5, TimeUnit.DAYS);
Duration result = Duration.getInstance(d1.getDuration() - d2.getDuration(), TimeUnit.DAYS);

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

Duration d1 = Duration.getInstance(13, TimeUnit.DAYS);
Duration d2 = Duration.getInstance(40, TimeUnit.HOURS);
Duration d3 = d2.convertUnits(TimeUnit.DAYS, project.getProjectProperties());
Duration result = Duration.getInstance(d1.getDuration() - d3.getDuration(), TimeUnit.DAYS);

В приведенном выше примере вторая продолжительность указана в часах (при условии, что рабочий день составляет 8 часов), которые мы конвертируем в дни перед расчетом разницы. Обратите внимание, что мы передаем свойства проекта методу convertUnits. Это предоставляет подробную информацию о том, сколько часов в рабочем дне и так далее, чтобы обеспечить точное преобразование. Существуют и другие варианты метода convertUnits, которые позволяют вам самостоятельно передавать эти значения.

person Jon Iles    schedule 18.01.2018
comment
Спасибо, но как я могу преобразовать существующую продолжительность в действии в значение с плавающей запятой, я пытаюсь сделать это сравнение несколько тысяч раз. - person Andre Davis; 18.01.2018
comment
Duration.getDuration() возвращает числовую часть продолжительности в виде double. например из примера выше, d1.getDuration(). - person Jon Iles; 18.01.2018