code: private void processExceptionDays(ProjectCalendar mpxjCalendar, List<net.sf.mpxj.planner.schema.Day> dayList)
     {
        for (ProjectCalendarException mpxjCalendarException : mpxjCalendar.getCalendarExceptions())
        {
           Date rangeStartDay = mpxjCalendarException.getFromDate();
           Date rangeEndDay = mpxjCalendarException.getToDate();
           if (DateHelper.getDayStartDate(rangeStartDay).getTime() == DateHelper.getDayEndDate(rangeEndDay).getTime())
           {
              //
              // Exception covers a single day
              //
              net.sf.mpxj.planner.schema.Day day = m_factory.createDay();
              dayList.add(day);
              day.setType("day-type");
              day.setDate(getDateString(mpxjCalendarException.getFromDate()));
              day.setId(mpxjCalendarException.getWorking() ? "0" : "1");
           }
           else
           {
              //
              // Exception covers a range of days
              //
              Calendar cal = DateHelper.popCalendar(rangeStartDay);
  
              while (cal.getTime().getTime() < rangeEndDay.getTime())
              {
                 net.sf.mpxj.planner.schema.Day day = m_factory.createDay();
                 dayList.add(day);
                 day.setType("day-type");
                 day.setDate(getDateString(cal.getTime()));
                 day.setId(mpxjCalendarException.getWorking() ? "0" : "1");
                 cal.add(Calendar.DAY_OF_YEAR, 1);
              }
              
              DateHelper.pushCalendar(cal);
           }
  
           /**
            * @TODO we need to deal with date ranges here
            */
        }
     }
docs: Process exception days.
  
  @param mpxjCalendar MPXJ Calendar instance
  @param dayList Planner list of exception days