Хотя это и достаточно легко заявить, ваша задача на самом деле довольно сложна для реализации.
Как правило, компиляторы COBOL поддерживают ряд встроенных функций, которые вы можете использовать для выполнения простой арифметики дат.INTEGER-OF-DATE и DATE-OF-INTEGER являются двумя примерами.INTEGER-OF-DATE берет дату в формате «ГГГГММДД» и преобразует ее в число дней от контрольной даты, ДАТА-ИНТЕГЕР берет количество дней с той же контрольной даты и преобразует ее в формат «ГГГГММДД»,Очень просто создать третью подпрограмму для выполнения простой арифметики дат с использованием этих функций.Пока все хорошо.
Сложная часть вашей проблемы - определение: 5 рабочих дней.Как правило, выходные дни и определенные праздничные дни не считаются «рабочими днями», поэтому фактическое количество дней, которое вам нужно добавить, может варьироваться от 5 до нескольких более 5. Например, если выходные дни не учитываются, а деньучитывая, что ваш расчет - пятница, вам нужно добавить 5 + 2 = 7 дней для учета субботы и воскресенья, которые не являются рабочими днями.
Если выходные дни - это все, о чем вам нужно беспокоиться, тогдаНе так уж сложно определить, на какой день недели приходится данный день, используя Конгруэнтность Целлера .Затем, исходя из начального дня недели, вы можете легко определить, нужно ли добавлять 5, 6 или 7 дней к начальной дате.
Действительно сложная часть - это определение других «нерабочих дней»,Обычно для этого вам нужна какая-то таблица поиска просто потому, что локализация определяет, что это будет;и фактический день года меняется на несколько выходных (например, второй понедельник месяца).Нет простого способа выполнить эту часть работы.В системах, над которыми я работал, мы используем внутреннюю стандартную подпрограмму, которую приложения вызывают, чтобы получить «нерабочее» определение даты.Процедура принимает в качестве входных данных дату и параметр локализации и возвращает логическое значение Да / Нет в зависимости от того, является ли данная дата нерабочей для данной локализации.Я подозреваю, что вам нужно будет реализовать нечто подобное.Важно, чтобы вы использовали какую-то корпоративную общепринятую стандартную процедуру для определения нерабочих дат, чтобы убедиться, что все ваши системы соответствуют друг другу (не очень хорошо, если система «А» определяет, что данная дата не является коммерческой).день, когда система «Б» рассматривает это как обычный рабочий день)