Datas Comemorativas No Ano - datas comemorativas do ano | PDF | Brasil
datas comemorativas do ano | PDF | Brasil

Como montar um calendário de datas comemorativas no ano: do básico ao que realmente funciona na prática

Eu precisava resolver isso há uns dois anos quando meu escritório começou a usar sistemas automatizados de envio de mensagens. A primeira versão que eu fiz levou uma semana inteira para ficar decente, e mesmo assim errou três datas importantes em 2023. O problema não era simples: datas comemorativas no ano não são só aquelas fixas no calendário gregoriano. Tem as móveis, as municipais, os feriados estaduais que variam de cidade para cidade, e ainda tem a questão dos substitutos quando o feriado cai num domingo. Vou explicar como eu cheguei num resultado que funciona de verdade, incluindo os detalhes chatos que ninguém conta.

Feriados fixos versus móveis: a divisão que separa amadores de quem entrega algo que não dá erro

Os fixos são os mais fáceis, mas mesmo aqui tem armadilha. Feriado nacional fixo é aquele que o Brasil inteiro ou um estado inteiro observa. Lista rápida para quem tá começando: Janeiro — Confraternização Universal (1º), carnaval (movel), segunda-feira de cinzas (movel)

Fevereiro/Março — sexta-feira santa (movel, sempre cai aqui ou em abril) Abril — Páscoa (domingo, movel), Tiradentes (21), Dia do Trabalho (1º de maio, às vezes confundido como abril por quem pega dadosErrados)

Maio — Dia das Mães (segundo domingo), Corpus Christi (movel, 60 dias após Páscoa) Junho — Dia de São João (24), Dia de Santo Antônio (13), Dia de São Pedro (29)

Setembro — Independência (7) Outubro — Dia do Senhor do Bonfim/Bom Jesus (2), Dia das Crianças (12), N. Sra. Aparecida (12 — feriado nacional desde 2002), Dia do Professor (15)

Novembro — Proclamação da República (15), Finados (2), Dia da Consciência Negra (20 — feriado nacional desde 2024) Dezembro — Natal (25)

O que a maioria dos tutoriais na internet não menciona é que Reveillon (31 de dezembro) não é feriado nacional. Ele só vira feriado em alguns municípios quando cai durante a semana. E Réveillon pode ser ponto facultativo, mas não obrigatório. Se você tá construindo algo pra empresa, trate ele como data comercial normal até confirmar com a legislação local.

Como calcular datas móveis: o algoritmo de Pascal e por que todo mundo erra isso

O calcolo da Páscoa é o coração de tudo. Ela segue o algoritmo de Meeus/Jones/Butcher, que é o padrão aceito internacionalmente. A lógica é baseada no ciclo lunar e no equinócio da primavera no hemisfério norte — tecnicamente "a primeira lua cheia após o equinócio vernal", com regras de corner cases específicas. O passo a passo simplificado pro implementador que não quer perder tempo:

1. Pegue o ano Y (ano gregoriano, positivo) 2. Calcule a = Y mod 19

3. Calcule b = floor(Y / 100) 4. Calcule c = Y mod 100

5. Calcule d = floor(b / 4) 6. Calcule e = b mod 4

7. Calcule f = floor((b + 8) / 25) 8. Calcule g = floor((b - f + 1) / 3)

9. Calcule h = (19 * a + b - d - g + 15) mod 30 10. Calcule i = floor(c / 4)

11. Calcule k = c mod 4 12. Calcule l = (32 + 2 * e + 2 * i - h - k) mod 7

13. Calcule m = floor((a + 11 * h + 22 * l) / 451) 14. O mês da Páscoa é floor((h + l - 7 * m + 114) / 31)

15. O dia é ((h + l - 7 * m + 114) mod 31) + 1 Aplicando isso pra 2025, por exemplo:

a = 2025 mod 19 = 10 b = floor(2025/100) = 20

c = 2025 mod 100 = 25 d = 5, e = 0, f = 1, g = 0

h = (190 + 20 - 5 - 0 + 15) mod 30 = 200 mod 30 = 20 i = 6, k = 1, l = (32 + 0 + 12 - 20 - 1) mod 7 = 23 mod 7 = 2

m = floor((10 + 220 + 44) / 451) = floor(274/451) = 0 mês = floor((20 + 2 - 0 + 114) / 31) = floor(136/31) = 4 (abril)

👉 Clique no botão abaixo para saber mais sobre o assunto!

dia = ((20 + 2 - 0 + 114) mod 31) + 1 = (136 mod 31) + 1 = 12 + 1 = 13 Páscoa de 2025 cai em 13 de abril. Confere com qualquer calendário eclesiástico confiável.

A partir daí as outras datas móveis se calculam somando ou subtraindo dias: Carnaval: Páscoa - 47 dias

Sexta-feira Santa: Páscoa - 3 dias Corpus Christi: Páscoa + 60 dias

Domingo de Ramos: Páscoa - 7 dias Ascensão: Páscoa + 39 dias

Dia das Mães: segundo domingo de maio (se o dia 10 cair num domingo, é aquele domingo; se cair numa segunda, é o dia 9 — em outras palavras, é o primeiro domingo de maio se o dia 1 for domingo, caso contrário é o segundo domingo) Dia dos Pais: segundo domingo de agosto (mesma lógica acima aplicada ao mês de agosto)

O detalhe que quase ninguém explica: dia das mães e dia dos pais no Brasil são fixos por lei, não por costume. A lei 4.721/65 institucionalizou o segundo domingo de agosto pro Dia dos Pais. O Dia das Mães foi fixado pelo decreto 53.900/63 como o segundo domingo de maio. Isso significa que se o dia 10 de maio cair num domingo, o feriado comercial é nesse dia — não importa se cair num feriado municipal.

O problema que ninguém avisa: feriados municipais e estaduais fazem o sistema quebrar

Em 2022 eu fiz uma planilha simples que ignorava feriados municipais porque o cliente era uma empresa nacional e eu pensava que bastava listar os nacionais. Resultado: a filial de Salvador não funcionava no feriado de emancipação (1 de novembro, não confunda com a independência) e a de São Paulo travava no feriado de emancipação paulista (9 de julho). Eu levei três semanas corrigindo porque não tinha mapeado os municípios corretamente. A solução que eu adotei e recomendo: mantenha uma lista de feriados municipais num arquivo separado, não hardcoded no código. Um arquivo JSON ou CSV com campos: município, UF, data, nome. Atualize essa lista sempre que uma prefeitura publicar edição de lei nova. Leis de feriado municipal mudam todos os anos em várias cidades — Rio de Janeiro mudou o feriado de São João, Porto Alegre incluiu o feriado de emancipação política, e São Paulo mudou a data do feriado de emancipação paulista.

Para Estados, a coisa é mais previsível, mas ainda assim exige atenção. Cada estado tem seus feriados estaduais específicos: Bahia — 2 de julho (Independência da Bahia)

São Paulo — 9 de julho (Revolução Constitucionalista) Rio de Janeiro — 20 de janeiro (padroeira do estado — Não é feriado estadual oficial, mas é ponto facultativo em muitas repartições)

Pernambuco — 6 de junho (Revolução Pernambucana) Ceará — 19 de março (Emancipação Política do Ceará)

Rio Grande do Sul — 20 de setembro (Revolução Farroupilha) Pará — 15 de agosto (Emancipação Política do Pará)

Maranhão — 28 de julho (Emancipação Política do Maranhão) Amazonas — 5 de setembro (Emancipação Política do Amazonas)

Aqui vai uma insights que ninguém conte nos artigos genéricos: a maioria dos feriados estaduais são pontos facultativos, não obrigatórios. O Código Civil Brasileiro (art. 14 da Lei 6.015/73) define apenas os feriados nacionais. Estatais e municipais são regulamentados por leis próprias, e muitas vezes o cumprimento é irregular. Se seu sistema precisa marcar algo como "feriado obrigatório" vs "ponto facultativo", você precisa cruzar a legislação local de cada cidade, não confiar em listas genéricas da internet.

Alternativas e limitações do método

Se você não quer implementar o algoritmo de Pascal do zero, existem bibliotecas prontas. Em Python, dateutil + relativedelta resolve pra datas móveis, mas pra dados municipais você ainda precisa da lista que eu mencionei. No JavaScript, a biblioteca churchofjesuschrist-dates ou holidays (que também existe pra Python) já cobre muitos municípios brasileiros, mas a cobertura não é 100% — especialmente pra cidades pequenas que mudam feriados sem publicar amplamente. O principal problema das bibliotecas prontas: elas às vezes não refletem a legislação mais recente. Eu vi em 2023 uma versão da biblioteca holidays que não incluía o feriado da Consciência Negra como nacional, porque a mudança foi em dezembro de 2023 e a atualização da biblioteca demorou. Isso significa que você precisa versionar suas próprias listas de datas comemorativas no ano e não confiar cegamente em bibliotecas externas sem checar contra fontes oficiais.

Outro gargalo: anos bissextos afetam o cálculo de datas móveis de maneira sutil. A Páscoa sempre cai entre 22 de março e 25 de abril, e o algoritmo de Pascal já leva isso em conta internamente. Mas se você estiver somando/subtraindo dias manualmente de datas fixas (por exemplo, "Corpus Christi = 60 dias após Páscoa"), certifique-se de que sua linguagem de programação lida corretamente com datas bissextas. Linguagens modernas como Python, JavaScript (com objetos Date) e Java (com java.time) lidam bem, mas linguagens mais antigas ou mal configuradas podem pular dias. Também vale lembrar que feriados que caem num domingo são transferidos para segunda-feira em muitos estados, mas nem sempre. A regra varia. Em São Paulo, por exemplo, se o feriado cai num domingo, ele não é transferido automaticamente — cada município decide. Em outros estados, a transferência é automática por lei estadual. Se seu sistema precisa saber disso, consulte a legislação de cada estado, não assuma um comportamento universal.

Um exemplo prático: montando um calendário anual em 10 minutos

Depois da dor de cabeça que eu passei, eu padronizei meu fluxo. Aqui está o que eu faço hoje pra gerar um calendário completo de datas comemorativas no ano: 1. Gerar todas as datas fixas com base na lista oficial (nacionais, estaduais, municipais)

2. Calcular Páscoa usando o algoritmo de Pascal ou uma biblioteca confiável 3. Derivar todas as datas móveis a partir da Páscoa

4. Aplicar regras de transferência quando feriado cair num domingo (verificar legislação local) 5. Cruzar com a lista de feriados municipais do arquivo JSON separado

6. Validar contra uma fonte externa (como o calendário da receita federal ou site oficial do governo) antes de confiar Isso leva cerca de 15 minutos pro primeiro setup, e depois cada novo ano leva menos de 5 minutos pra gerar — desde que você já tenha a estrutura pronta. Sem a estrutura, leva de 2 a 3 horas pra fechar tudo sem erro.

Se precisar de algo pronto pra testar, a biblioteca holidays do Brasil (disponível via pip install holidays) cobre a maioria dos feriados nacionais, estaduais e municipais com boa cobertura. Pra datas móveis, use dateutil.relativedelta junto com o cálculo de Páscoa da própria biblioteca ou do módulo ephem se precisar de precisão astronômica. Para quem quer ir além e precisa de feriados religiosos de alta precisão (como a data exata da Páscoa ortodoxa, que segue o calendário juliano e pode diferir da católica/em romano por até cinco semanas), aí o assunto entra num nível bem mais complexo. Mas pra a maioria dos casos empresariais no Brasil, o algoritmo de Pascal + lista municipal versionada resolve 95% dos problemas que eu encontrei.