Когда сталкиваешься со сложным временем, подобным этому, часто лучше просто запустить задание, используя базовый шаблон. Сама программа может немедленно завершиться, если любой из «исключительных» случаев (выходных) верен. Что касается праздников, я рекомендую хранить файл данных с исключительными днями, чтобы его можно было обновить, если изменились оплачиваемые выходные дни клиента.
Если вы не можете изменить Java целевой программы, пусть задание cron запускает небольшую программу, которая выполняет этап проверки, а затем запускает реальную целевую программу, если ни один из исключительных случаев не имеет места.