De manière générale, une telle contrainte est spécifiée par un domaine de valeurs d'instants, formellement une disjonction d'intervalles d'entiers, et un opérateur relationnel qui détermine si la ressource est disponible ou bien indisponible dans l'intervalle de temps défini par le domaine. La valeur par défaut du domaine est [0 infini], et la valeur par défaut de l'opérateur est IN.
Il existe deux manière d'exprimer la disjonction d'intervalles :
- on positionne explicitement dans le temps les bornes de chaque intervalle. Par exemple {[0 10] [15 15]}. Dans ce cas, on crée une instance de la sous-classe TimeAvailabilityConstraint de AvailabilityConstraint.
- fonctionnellement : les valeurs pour les bornes du premier intervalle sont calculées par une fonction, et les valeurs pour les bornes des intervalles suivants sont calculées par une fonction sur les intervalles précédents. Dans ce cas, on crée une instance de RecurrentAvailabilityTimetable, dont les éléments sont des instances de AvailabilityTimeSlot.