P6 and Microsoft Project
Calendar Exceptions: P6 vs Project
P6 calendar exceptions ≠ MSP Exceptions; not suspend; blob not bit-identical

What each actually is
P6: an exception is a day (or hours on a day) that is not the Standard Work Week. Oracle: “work or nonwork days or hours that are different than the standard hours defined on the Standard Work Week tab.” Set a date to Nonwork or back to Standard. A globe on the day means the base calendar has an exception; override it and the globe goes away; Set to Standard and the inherited exception returns. Primavera Cloud also: exception time as a block of hours, or a range Unavailable / Available. Imported iCal events that exceed the day’s standard worktime become all-day nonwork exception time.
Storage: CALENDAR.clndr_data (Oracle label: Data). Work week and exceptions live in that blob. Internal layout is unverified. Do not invent a parser from this note.
Project: holidays and one-off work/nonwork are Exceptions on Change Working Time (name + start/finish). Recurring exceptions (yearly Memorial Day, etc.) are a Project Details option. MSPDI stores them under the calendar Exceptions list. The Standard Work Week is a different grid (weekday hours).
Same idea, not the same object
| P6 | Project | |
|---|---|---|
| Week pattern | Standard Work Week tab | Change Working Time week days |
| One-off / holiday | Calendar day Nonwork / hours ≠ standard | Named Exception row |
| Inheritance | Globe = exception from base calendar | Resource/task calendar based on a base; exceptions can be local |
| Recurrence | Range / Manage Exceptions (Cloud); no Oracle “yearly Nth Thursday” sentence on the P6 pages cited | Recurring exception in Details |
| Where stored | clndr_data blob | MSPDI Exceptions |
MPXJ may flatten calendar hierarchy on write. Exception count and recurrence expansion can differ. See calendars-map.md.
What Do not treat as the same
- A P6 suspend gap is not a calendar exception. Suspend is
TASK.suspend_date/resume_date. Calendar necking and activity-nonwork necking are two bar settings. See Suspend / Resume (Not a Calendar Exception, Not an MSP Split). - Do not assume
clndr_dataround-trips bit-identical to MSPDI Exceptions. Weekday hours usually have an analogue; recurring / inherited / partial-day exceptions are unverified as complete. - Do not drop inherited (globe) exceptions when copying a resource calendar off its base. Set to Standard restores the base exception.
- Do not treat Project “Exception” as P6 Expected Finish or a constraint.
- Do not invent a P6 global holiday dictionary inside MSPDI. MSPDI has a calendar list, not EPS-global vs project pools.