A regra que todo mundo lembra errado
Um ano bissexto é basicamente um ajuste no calendário para que ele continue casado com o movimento real da Terra ao redor do Sol. O problema é que esse ajuste não é tão simples quanto "a cada quatro anos" parece ser na prática. A Terra leva cerca de 365 dias, 5 horas, 48 minutos e 45 segundos para completar uma órbita. Isso sobra quase seis horas por ano que precisam ser acumuladas, senão o calendário vai arrastando para trás em relação às estações sem ninguém perceber até ser tarde demais.
Entendendo o que é um ano bissexto na prática
A conta é: adicionamos um dia extra, 29 de fevereiro, sempre que esse saldo acumulado de frações de dia chega a quase um dia inteiro. Mas a regra oficial do calendário gregoriano tem duas exceções que costumam confundir todo mundo. O ano divide por 4 e é bissexto, exceto se for divisível por 100, data em que deixa de ser bissexto, a menos que também seja divisível por 400, quando volta a ser. Isso significa que 2000 foi bissexto porque 2000 é divisível por 400. 1900 não foi, apesar de divisível por 4, porque cair no caso dos 100 e não nos dos 400. 2100 vai passar o mesmo problema. Esses detalhes aparecem em sistemas legados de forma bem chata.
Eu trabalhei numa migração de banco de dados em 2019 onde um sistema legado, escrito em COBOL nos anos 80, tinha a lógica de anos bissextos embutida como "se o último dígito do ano for par, adiciona fevereiro com 29 dias". Ele tratou 1900 como bissexto. Quando carregamos dados históricos cruzando séculos, as datas de fevereiro de 1900 ficaram inconsistentes com a realidade astronômica e com qualquer outra ferramenta da época. A correção foi um script Python que rodou sobre 47 milhões de registros, ajustando as datas de 1900 a 1999 que tinham sido geradas pelo sistema antigo. Levou umas três horas e meia, mas salvou a integridade do relatório anual.
Por que a regra dos 400 existe e o que ela resolve
A simples adição de um dia a cada quatro anos cria um excesso. Se fosse só isso, o calendário ganharia cerca de 11 minutos e 14 segundos por ano em relação ao ano trópico real. Em quatro séculos, esse excesso acumula algo em torno de três dias inteiros a mais do que deveria. A regra dos 100 e dos 400 remove esses três dias excedentes exatamente quando necessário. O ano trópico medido hoje pelo IERS (International Earth Rotation and Reference Systems Service) é de aproximadamente 365,24219 dias. A fórmula gregoriana dá uma média de 365,2425 dias. A diferença é de cerca de 26 segundos por ano. Leva mais de 3.000 anos para essa discrepância acumular um dia inteiro. Na prática, isso é irrelevante para a maioria das aplicações comerciais e pessoais.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Mas para astronomia, navegação, satélites e sistemas de sincronização como o NTP, esses segundos importam. O tempo atômico já avançou mais de 30 segundos em relação ao tempo terrestre desde que os leap seconds foram instituídos em 1972. Em julho de 2025, houve uma discussão no IERS sobre eliminar os leap seconds definitivamente, o que mudaria a forma como sistemas operacionais lidam com a transição de segundos em anos bissextos. Isso pode criar um novo conjunto de problemas em softwares que não estão preparados.
Erros comuns que você vai encontrar
A maioria dos programadores junior testa se um ano é bissexto assim: `ano % 4 == 0`. Funciona para 95% dos casos do dia a dia, mas quebra feio em décadas múltiplas de 100. Já vi isso acontecer em ferramentas de relatórios financeiros que calculavam juros diários e, em 1900, calculavam um dia a mais de juros do que deveria existir, distorcendo o saldo final de contratos antigos. Outro erro clássico é assumir que fevereiro sempre tem 28 dias em anos normais e 29 em bissextos, sem considerar calendários não-gregorianos. O calendário julgar, que antecedeu o gregoriano em 1582, usava apenas a regra dos 4. A Igreja Ortodoxa ainda usa uma variante própria que resulta em anos bissextos em datas diferentes das ocidentais em alguns ciclos. Se seu sistema atende usuários na Grécia, Rússia ou Egito, a data do 29 de fevereiro pode não coincidir.
Tem ainda o problema das libraries. A função `mktime` do C, se chamada com a data 29/02/1900, retorna -1 em muitas implementações porque o comportamento depende da biblioteca C subjacente e da versão do sistema. O Java `java.time.Year.isLeap()` é mais confiável e segue a regra gregoriana corretamente desde o Java 8. Em JavaScript, não existe uma função nativa dedicada — você precisa implementar ou usar uma library como o Moment.js, que por sua vez tem seus próprios bugs históricos com anos bissextos em versões anteriores a 2.18.
Como verificar na mão, rápido
Para saber se um ano qualquer é bissexto no calendário gregoriano, use esta sequência: o ano é divisível por 4? Se não, comum. Se sim, é divisível por 100? Se não, bissexto. Se sim, é divisível por 400? Se sim, bissexto. Se não, comum. Anos como 2024, 2028 e 2000 são bissextos. 2023, 1900 e 2100 não são. Se quiser validar isso no seu sistema agora, rode `cal 2 2024` no terminal Linux ou macOS. Ele vai mostrar o fevereiro daquele ano com 29 dias. Rode `cal 2 1900` e você verá apenas 28. A diferença entre 2000 e 1900 no mesmo comando mostra visualmente o efeito da regra dos 400 em ação.