Task.Duration Свойство в проекте MS - PullRequest
2 голосов
/ 15 февраля 2012

Как мне конвертировать Task.Duration, чтобы получить действительный результат? Я нахожу объяснения об этом свойстве в MSDN :

Получает или задает продолжительность (в минутах) задачи.

Но это не работает правильно.

Если я разделю результат на 60 (минуты в часе) и 24 (часы в дне), я получаю неверный результат.

Но если я разделю на 20 и 24, то все в порядке. И я не понимаю почему. Я использую C # в .Net 3.5 и основных сборках взаимодействия Office (Microsoft.Office.Interop.MSProject для Office 2010).

Я использую этот код:

 void SetProperties(MSProject.Task o, string version)
 {
                Wbs = o.WBS.ToString();
                Name = o.Name.ToString();
                StartDate = (System.DateTime) o.Start;
                FinishDate = (System.DateTime)o.Finish;
                Iteration = version;
                duration = (Convert.ToInt16(o.Duration)/10/24).ToString();//after result //divided by 2 I get correct result. Why?
}

спасибо

1 Ответ

2 голосов
/ 20 марта 2012

Причина, по которой он работает не так, как вы ожидаете, заключается в том, что за день у вас нет 24 часов рабочего времени.Продолжительность задания - это рабочее время между началом и окончанием, а не абсолютное количество часов.

Поскольку по умолчанию количество рабочих часов в дне равно 8, выразделите общее количество минут на 480 (60 минут * 8 часов), чтобы получить количество дней.Ваше вычисление 20 * 24 также оказалось равным 480, поэтому вы наткнулись на правильное число.

Конечно, не ожидайте, что Start + Duration (в днях) будет равна вашей дате окончания.Это потому, что вы также должны учитывать нерабочие дни, например, выходные.Таким образом, у вас может быть трехдневное задание, которое начинается в пятницу, и оно не завершится до конца дня во вторник (5 календарных дней).

...