POTHIEDU Não Decore a Resposta. Entenda o Caminho

2008 Foi Ano Bissexto

2008 Foi Ano Bissexto

Como verificar se um ano é bissexto na prática

A regra básica é simples: um ano é bissexto se for divisível por 4, exceto os anos terminados em 00, que precisam ser divisíveis por 400. 2008 divide por 4 e não é ano secular, então é bissexto. Fim da história para a maioria das pessoas. O ano de 2008 teve 366 dias, com 29 dias em fevereiro. Isso afeta cálculos de intervalo, contagem de dias úteis e diversas regras de negócio que contam dias corridos. O problema que eu encontrei na prática foi mais chato do que parece. Tinhas uma planilha com datas de início e fim de contratos, e uma rotina que calculava a idade de cada cliente subtraindo anos e depois ajustando se o aniversário ainda não tinha acontecido no ano corrente. Funcionava bem até alguém testar com um nascimento em 29 de fevereiro. Se a lógica só checa se o mês é fevereiro e o dia é menor ou igual a 29, ela quebra feio em anos não bissextos porque não existe dia 29 naquele mês. A solução que eu usei foi uma função simples que, em anos não bissextos, devolve 1 de março como aniversário equivalente. Em anos bissextos, mantém 29 de fevereiro. Assim a conta fecha sempre.

Em Python eu faria algo assim: def aniversario_equivalente(data_nascimento, data_referencia):
try:
return data(data_referencia.year, data_nascimento.month, data_nascimento.day)
except ValueError:
return data(data_referencia.year, 3, 1) Esse tipo de detalhe passa despercebido até o relatório mensal dar erro em produção.

Outro ponto que as pessoas costumam perder: anos terminados em 00 são a exceção, não a regra. 1900 não foi bissexto, mas 2000 foi. Muita gente acha que 2000 também não seria porque "divide por 4 já bastava", mas a regra dos 400 entra justamente aí. Se o seu sistema usa uma lógica do tipo `ano % 4 == 0`, ele vai errar em 1900, 2100, 2200 e assim por diante. Você perde um dia a cada ciclo de 100 anos e o erro acumula silenciosamente. Se você está validando isso em código, a maneira mais segura que eu vejo é usar a função nativa da linguagem, não reimplementar a regra. Em JavaScript, `new Date(2008, 1, 29).getMonth() === 1` verifica se o 29 de fevereiro de 2008 existe sem transbordar para março. Em Python, `calendar.isleap(2008)` faz a mesma coisa de forma direta. Reimplementar a fórmula manualmente é pedir para ter dor de cabeça com anos seculares. Para conferência rápida, sem código, basta dividir por 4. Se sobrar algo, não é bissexto. Se o ano terminar em 00, divida por 400. Se der inteiro, é bissexto. 2008 dividido por 4 dá 502, sem resto. Então sim, 2008 foi ano bissexto e fevereiro daquele ano teve 29 dias.

Como saber se um ano é BISSEXTO? | ANO BISSEXTO! - YouTube
Como saber se um ano é BISSEXTO? | ANO BISSEXTO! - YouTube

Se você precisa de uma referência rápida para converter anos bissextos em outras plataformas, a tabela oficial do calendário gregoriano está disponível no site do Bureau International des Poids et Mesures, que mantém os dados de referência usados por sistemas globais.