You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MPXJ 12.5.0技术问题:提取或计算拆分任务的持续时长

使用MPXJ 12.5.0处理拆分任务的持续时长计算

正确获取拆分任务的分段信息

你提到的getSplits()方法是获取拆分任务分段的正确API,每个返回的TaskSplit对象包含对应分段的完整时间信息:

  • getStart():分段的起始时间
  • getFinish():分段的结束时间
  • getDuration():分段的工期

如果之前调用未得到预期结果,可能是任务本身无拆分数据,或未正确遍历返回集合。示例代码:

Task targetTask = ...; // 获取目标拆分任务
List<TaskSplit> splitSegments = targetTask.getSplits();
for (TaskSplit segment : splitSegments) {
    LocalDateTime start = segment.getStart();
    LocalDateTime finish = segment.getFinish();
    Duration duration = segment.getDuration();
    // 处理单段数据
}

计算特定状态日期下的实际持续时长

遍历所有拆分分段,判断分段与目标日期的时间交集,累加有效时长:

  1. 若分段在状态日期前结束,累加整个分段时长
  2. 若分段跨状态日期,计算从分段起始到状态日期的部分时长
  3. 若分段在状态日期后开始,不计入总时长

示例逻辑代码:

LocalDateTime statusDate = ...; // 指定的状态日期
Duration totalActualDuration = Duration.ZERO;

for (TaskSplit segment : targetTask.getSplits()) {
    LocalDateTime segStart = segment.getStart();
    LocalDateTime segFinish = segment.getFinish();

    if (segFinish.isBefore(statusDate) || segFinish.isEqual(statusDate)) {
        totalActualDuration = totalActualDuration.plus(segment.getDuration());
    } else if (segStart.isBefore(statusDate) && segFinish.isAfter(statusDate)) {
        Duration partial = Duration.between(segStart, statusDate);
        totalActualDuration = totalActualDuration.plus(partial);
    }
}

备选方案:通过进度字段间接推算

若拆分分段数据获取异常,可结合任务进度字段估算:

  • getActualDuration():已完成的实际总时长
  • getPercentComplete():任务完成百分比
  • getRemainingDuration():剩余工期

这种方法精度低于直接拆分数据,仅作为临时替代。

内容的提问来源于stack exchange,提问作者Rafael Nobre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:55:11