Joao,
tem diversas maneiras, os feriados como o carnaval etc são feriados moveis porem segue um algoritimo assim como o corpus christis sempre se baseam na pascoa, para calcular a pascoa eu fiz o algoritimo abaixo em sql server,
o que fode sao os feriados (municipais,estaduais, pontos facultativos, etc) que pode ou nao entrar na sua regra de negocio, ai depende do seu negocio.
outra alternativa são sites que tem as datas de feriados (nacionais, municipais, estaduais) até 2050 ai é so cadastrar todos (se nao me engano alguns tem em excel) ao invez de ficar lembrando de atualizar todo ano ou criar uma job no seu banco de dados que executa todo ano a rotina baixo.
eu tenho tambem uma função no sql server que calcula os minutos uteis entre duas datas já subtraindo os feriados (no caso voce precisaria de uma tabela de feriado) se precisar dessa function é so falar.
CREATE FUNCTION [fncCalcPascoa] (@ano int )
RETURNS datetime
AS
BEGIN
DECLARE
@seculo INT,
@G INT,
@K INT,
@I INT,
@H INT,
@J INT,
@L INT,
@MesDePascoa INT,
@DiaDePascoa INT,
@pascoa smalldatetime
SET @seculo = @ano / 100
SET @G = @ano % 19
SET @K = (@seculo - 17) / 25
SET @I = (@seculo - Cast(@seculo / 4 as int) - Cast((@seculo - @K) / 3 as int) + 19 * @G + 15) % 30
SET @H = @I - Cast(@I/28 as int) * (1* - Cast(@I/28 as int) * Cast(29/(@I + 1) as int))* Cast(((21 - @G)/11) as int)
SET @J = (@ano + Cast(@ano / 4 as int) + @H + 2 - @seculo + Cast(@seculo/4 as int)) % 7
SET @L = @H - @J
SET @MesDePascoa = 3 + Cast((@L+40)/44 as Int)
SET @DiaDePascoa = @L + 28 - 31*Cast((@MesDePascoa/4) as int)
SET @pascoa= Cast(@MesDePascoa as varchar(2)) + '-' + Cast(@DiaDePascoa as varchar(2)) + '-' + Cast(@ano as varchar(4))
RETURN @pascoa
END
--
Aquele Abraço,
Ricardo Araujo