Fórum Verificar se data é feriado #623832
18/11/2025
0
Vamos imaginar que eu queira saber quais são os feriados num periodo de 10 anos.
Primeiro, crio uma tabela e cadastro os feriados desejados, como por exemplo:
01/01/2025 ANO NOVO 25/12/2025 NATAL
Uso 2 DateTimePicker para definir a data de inicio e data de fim e faço uma consulta SQL para localizar as datas.
O problema é que quando minha busca sair do ano 2025 e for para o ano 2026, não vou achar nenhum feriado.
Então queria ver com vocês qual seria a melhor alternativa para eu realizar essa busca
Renan
Curtir tópico
+ 0Posts
20/11/2025
Arthur Heinrich
Existem 3 tipos de feriados:
1 - Feriados Nacionais Fixos
Feriados como o dia da Independência do Brasil ou Programação da República, são exemplos. Como eles ocorrem sempre no mesmo dia do ano e se aplicam a todo o território nacional, podem ser cadastrados com antecedência de X anos, de forma automatizada. Por exemplo, 10 anos à frente, dependendo de sua necessidade.
2 - Feriados Nacionais Móveis
Estes ocorrem, geralmente, associados à Páscoa. Sendo assim, a primeira tarefa é definir quando a Páscoa ocorrerá no ano (e anos seguintes), para depois calcular os demais.
A Páscoa é celebrada no primeiro domingo após a primeira lua cheia que ocorre em ou após o equinócio de março (dia 21 de março, data eclesiástica fixa que representa o início da primavera no Hemisfério Norte/outono no Hemisfério Sul). A data da Páscoa pode, assim, variar entre 22 de março e 25 de abril.
A partir deste domingo de Páscoa, calcula-se os demais feriados somando ou subtraindo uma quantidade fíxa de dias.
3 - Feriados Estaduais ou Municipais
Feriados estaduais e municipais são, em geral, fixos. Ou seja, sempre ocorrem na mesma data. Porém, sua abrangência não é nacional. Exemplos disso, em São Paulo, são o dia 25/janeiro, em que se comemora o aniversário da cidade de São Paulo e 09/julho, em que se comemora a Revolução Constitucionalista de 1932 no Estado de São Paulo.
Para estes, requer um cadastro mais complexo, mas não impossível de se programar de forma automatizada e o sistema precisa avaliar se é feriado ou não, de acordo com a localização geográfica do usuário.
Gostei + 0
24/11/2025
Renan
Então eu buscaria na tabela de feriados a data completa, mas faria a comparação somente pelo dia e mês...
O problema é que na minha rotina atual tem o calculo de parcelas e não posso usar o DecodeDate ali, senão quando eu lançar parcelas em 60x, por exemplo, o sistema se perderia.
Acho que realmente vou precisar cadastrar os feriados da forma que você mencionou.
Gostei + 0
29/11/2025
Emerson Nascimento
Usando o exemplo do Arthur Heinrich, quando for um feriado fixo, você não precisa cadastrar diversas vezes por causa do ano. Basta ignorar o ano ao fazer a busca.
O cadastro seria mais ou menos assim:
Dia : [mês/ano]
Ano: [um conteúdo ou vazio]
Abrangencia: [Nacional / Estadual / Municipal]
Local: [se estadual, o estado; se municipal o município+estado]
Descrição: [descrição do feriado]
Com índice por todos os campos
Exemplo de cadastro:
Dia : 01/01
Ano: (vazio)
Abrangencia: Nacional
Local: (ignorado, porque agrangência é nacional)
Descrição: Confraternização universal
Dia : 12/25
Ano: (vazio)
Abrangencia: Nacional
Local: (ignorado, porque agrangência é nacional)
Descrição: Natal
Ao fazer a busca, você faria algo como:
dia = '01/01'
and (ano = ' ' or ano = [ano desejado])
and ((abrangencia = 'Nacional') or (abrangencia = 'Estadual' and local = [UF desejada]) or (abrangencia = 'Municipal' and local = [Cidade/UF desejada]))
Isto serve para gerar datas de vencimentos de títulos baseados no destino.
Comumente as empresas alteram a data de vencimento de um título em razão da própia localidade, mas eu estiver em São Paulo/SP e fizer uma venda para Belo Horizonte/MG eu preciso me preocupar com o feriado de Belo Horizonte, não de São Paulo.
Gostei + 0
29/11/2025
Emerson Nascimento
O cadastro seria mais ou menos assim:
Dia : [mês/DIA]
Ano: [um conteúdo ou vazio]
Abrangencia: [Nacional / Estadual / Municipal]
Local: [se estadual, o estado; se municipal o município+estado]
Descrição: [descrição do feriado]
Com índice por todos os campos
Exemplo de cadastro:
Dia : 01/01
Ano: (vazio)
Abrangencia: Nacional
Local: (ignorado, porque agrangência é nacional)
Descrição: Confraternização universal
Dia : 01/25
Ano: (vazio)
Abrangencia: Municipal
Local: São Paulo/SP
Descrição: Confraternização universal
Dia : 03/04
Ano: 2025
Abrangencia: Estadual
Local: SP
Descrição: Carnaval
Dia : 07/09
Ano: (vazio)
Abrangencia: Estadual
Local: SP
Descrição: Revolução constitucionalista
Dia : 12/25
Ano: (vazio)
Abrangencia: Nacional
Local: (ignorado, porque agrangência é nacional)
Descrição: Natal
Ao fazer a busca, você faria algo como:
dia = '01/01'
and (ano = ' ' or ano = [ano desejado])
and ((abrangencia = 'Nacional') or (abrangencia = 'Estadual' and local = [UF desejada]) or (abrangencia = 'Municipal' and local = [Cidade/UF desejada]))
Isto serve para gerar datas de vencimentos de títulos baseados também no destino.
Comumente as empresas alteram a data de vencimento de um título em razão da própia localidade, mas eu estiver em São Paulo/SP e fizer uma venda para Belo Horizonte/MG eu preciso me preocupar com o feriado de Belo Horizonte, não de São Paulo.
Para buscar todos os feriados dos próximos 10 anos basta fazer:
and (ano = ' ' or ano <= 2035)
Para buscar os feriados dos próximos 10 anos da tua localidade:
and (ano = ' ' or ano <= 2035)
and ((abrangencia = 'Nacional') or (abrangencia = 'Estadual' and local = [UF desejada]) or (abrangencia = 'Municipal' and local = [Cidade/UF desejada]))
Gostei + 0
01/12/2025
Renan
Entendi sua lógica, mas não estou conseguindo adaptar ao meu cenário.
Vou tentar te explicar como é hoje:
Na geração de parcelas tenho uma variavel chamada DataGravar que recebe a data de vencimento da parcela. Essa variavel está dentro de um For e é alimentada conforme o susrio informar(a cada x dias ou mensalmente).
Para verificar os finais de semana o DataGravar passa por uma function
result := not in dayofweek [1,7] or clientdataset.locate('dataferiado', Dia [])Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)