java - 如何在 MPXJ 中将周末设置为工作日

标签 java mpxj

我正在通过 MPXJ 库导出 MS Project 中的项目,我有一个问题:
如何将特定日期周六(或周日)设置为工作日而不是周末? (在 ProjectCalendar 或其他地方)
例如2014年10月18日(星期六)设置为工作日,但其他星期六需要为周末。

public ProjectCalendar initCalendar(ProjectFile projectfile, int calendarId, Date startDate, Date endDate) { 
        ProjectCalendar defaultCalendar = projectfile.addDefaultBaseCalendar();

        /*Setup standart working week*/
        defaultCalendar.setName("Standart");
        defaultCalendar.setWorkingDay(Day.MONDAY, DayType.WORKING);
        defaultCalendar.setWorkingDay(Day.THURSDAY, DayType.WORKING);
        defaultCalendar.setWorkingDay(Day.WEDNESDAY, DayType.WORKING);
        defaultCalendar.setWorkingDay(Day.TUESDAY, DayType.WORKING);
        defaultCalendar.setWorkingDay(Day.FRIDAY, DayType.WORKING); 
        defaultCalendar.setWorkingDay(Day.SATURDAY, DayType.NON_WORKING);
        defaultCalendar.setWorkingDay(Day.SUNDAY, DayType.NON_WORKING);


        ProjectCalendarHours pch;
        pch = defaultCalendar.addCalendarHours(Day.MONDAY);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);

        pch = defaultCalendar.addCalendarHours(Day.THURSDAY);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);

        pch = defaultCalendar.addCalendarHours(Day.WEDNESDAY);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);

        pch = defaultCalendar.addCalendarHours(Day.TUESDAY);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);

        pch = defaultCalendar.addCalendarHours(Day.FRIDAY);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);


        /* setup holydays*/
        List<Date> workingHollidays = DBHelper.getWorkingHolidays(ppmCalendarId, startDate, endDate);
        for (Date work : workingHollidays) {
            ProjectCalendarException ex = defaultCalendar.addCalendarException(work, work);
        }

        /*There is  I need change stendart week and setup 6-days working week (Saturday is work day) */
        /*something like that*/
        Date workindDay = new SimpleDateFormat("dd.MM.yyyy").parse("18.10.2014");
        defaultCalendar.setWorkingDay(workindDay, DayType.NON_WORKING); // This code not work
        pch = defaultCalendar.addCalendarHours(workindDay); // This code not work
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
        pch.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);
    }

并且在输出 Microsoft Project xml 中将是这样的标记:

<Calendar>
    ...
    <WeekDay>
        <DayType>
            0
        </DayType>
        <DayWorking>
            1
        </DayWorking>
        <TimePeriod>
            <FromDate>2014-10-18T00:00:00</FromDate>
            <ToDate>2014-10-18T23:59:00</ToDate>
        </TimePeriod>
        <WorkingTimes>
            <WorkingTime>
                <FromTime>09:00:00</FromTime> 
                <ToTime>13:00:00</ToTime>
            </WorkingTime>
            <WorkingTime>
                <FromTime>14:00:00</FromTime> 
                <ToTime>18:00:00</ToTime>
            </WorkingTime>
        </WorkingTimes>
    </WeekDay>
    ...
</Calendar>

谢谢。

最佳答案

我找到了答案。
有将自定义日期设置为工作日期的代码:

Date workindDay = new SimpleDateFormat("dd.MM.yyyy").parse("18.10.2014"); 
ProjectCalendarException ex = defaultCalendar.addCalendarException(workindDay, workindDay);
ex.addRange(ProjectCalendar.DEFAULT_WORKING_MORNING);
ex.addRange(ProjectCalendar.DEFAULT_WORKING_AFTERNOON);

范围的顺序很重要。

关于java - 如何在 MPXJ 中将周末设置为工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26550150/

相关文章:

java - 我们可以将应用程序上下文 get bean 类型转换为 Class<?>

java - 如何为不同类型的可变数量的参数编写 Java 构造函数?

java - Double不是抽象的,并且不会重写ListInterface中的抽象方法getNext()吗?

java - MS Project 显示不正确的开始日期和结束日期

java - 构建动态 JPanel 的最佳方法

java - sax 解析器从 xml 返回空字符串

java - 读取/解析 MS Project MPP java Android 5.0+?

.net - .NET 中的 MPXJ 将 java Date 转换为 .NET DateTime

project-management - MPXJ Api 在写入 .MPX 文件之前会自动计算 endDate 吗?

c# - 如何在 C# MVC3 中使用 MPXJ .net 读取 .mpp 文件?