O calendário não é tão simples quanto parece
O dia 29 de fevereiro acontece a cada quatro anos. Isso é o básico que todo mundo sabe, mas a regra tem mais camadas do que a maioria das pessoas leva em consideração quando precisa lidar com datas no dia a dia.dia 29 de fevereiro é de quantos em quantos anos
A resposta curta é quatro anos. A resposta completa envolve um sistema de correção que existe porque o ano solar não dura exatamente 365 dias. Ele dura cerca de 365,24219 dias. Se o calendário simplesmente adicionasse um dia a cada quatro anos sem exceções, ele se afastaria do ano solar em cerca de um dia a cada 128 anos. O erro acumula e, com o tempo, as estações do ano começam a sair do lugar no calendário. O sistema gregoriano, que é o que o Brasil e a maioria dos países usam hoje, resolve isso com duas regras adicionais. Um ano é bissexto se for divisível por 4. Mas se também for divisível por 100, não é bissexto, exceto se for divisível por 400. Esse detalhe é onde a maioria das pessoas trava quando tenta calcular mentalmente.
Por exemplo, 1900 não foi bissexto. Está na conta: divisível por 4, sim. Divisível por 100, também. Divisível por 400, não. O ano teve apenas 28 dias de fevereiro. Já 2000 foi bissexto porque satisfaz todas as três condições. 2100 não será bissexto. 2400 será. No geral, num período de 400 anos, existem 97 anos bissextos e 303 normais. A média fica em 365,2425 dias por ano, que é uma aproximação muito boa dos 365,24219 reais. A diferença é de menos de um segundo por ano, então o calendário gregoriano não precisa de ajustes há séculos.
Eu já precisei lidar com isso na prática ao construir um sistema de agendamentos recorrentes que precisava respeitar aniversários de pessoas nascidas em 29 de fevereiro. O problema apareceu quando o serviço de notificação tentou enviar um lembrete em anos não bissextos. A data simplesmente não existia. O sistema falava em silencio, porque a lógica dizia que o aniversário só existia em anos bissextos, mas os usuários achavam que estavam sendo esquecidos. A solução que funcionou foi definir uma regra de fallback: em anos não bissextos, o aniversário de 29 de fevereiro é tratado como 28 de fevereiro para efeitos de notificação e agendamento. Não é ideal, porque o usuário sabe que nasceu no dia 29, mas é o que a maioria das plataformas faz. Algumas escolhem 1º de março. Não tem uma resposta certa aqui, tem consistência. O que eu fiz foi deixar claro nos termos do serviço qual das duas abordagens estava sendo usada e nunca mudar depois.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Um ponto que pouca gente considera é a diferença entre o ano civil e o ano tropical. O bissextro existe para alinhar os dois, mas o alinhamento nunca é perfeito. O atraso acumulado entre o calendário gregoriano e o ano tropical atual é de cerca de 26 segundos por século. Em outros termos, daqui a uns 3.000 anos, pode ser necessário remover um dia bissexto de um ano que seria bissexto pela regra atual. Ninguém vai resolver esse problema, porque não há consenso sobre como fazer isso sem confundir todo mundo. Outro erro comum que vejo aparecer em códigos e planilhas é a forma como linguagens de programação tratam anos bissextos. A regra divisível por 4 funciona para a grande maioria dos casos, mas sistemas que usam a regra de Leagreson de forma incorreta podem gerar datas inválidas para anos como 1900 e 2100. Se você estiver escrevendo lógica própria de calendário, testar explicitamente esses anos-ponte vale o esforço.
Uma coisa também importante é que nem todo país usa o calendário gregoriano atualmente. Países que usam calendários lunares ou luni-solares, como China, Japão (em contextos tradicionais), Índia e Israel, têm suas próprias regras para anos bissextos que não se aplicam ao nosso sistema. Se o seu trabalho envolve datas internacionais, assumir que 29 de fevereiro cai a cada quatro anos de forma idêntica em todo lugar pode levar a erro. O ciclo completo de dias da semana para datas de 29 de fevereiro se repete a cada 28 anos dentro do mesmo século, mas esse ciclo é quebrado nos anos divisíveis por 100 que não são divisíveis por 400. Na prática, isso significa que se você tentar prever em que dia da semana cairá o 29 de fevereiro de 2100 usando apenas a divisão por 28, vai acertar. O próximo ciclo que quebra essa previsão é 2200.
Se você precisa verificar se um ano é bissexto de forma confiável, a regra lógica é: ano % 4 == 0 e (ano % 100 != 0 ou ano % 400 == 0). Se estiver usando uma biblioteca de data em vez de escrever a regra manualmente, confie nela. A maioria das bibliotecas modernas implementa essa lógica corretamente para o período gregoriano completo.