Trabalhando com datas fixas: o caso de abril de 2005
Muita gente pede um calendário de abril de 2005 e não sabe o que fazer com ele depois. Eu entendo. Às vezes você só precisa saber que dia da semana caiu em tal data, ou precisa validar um arquivo legado que guarda datas nesse formato. Vou explicar como eu monto e verifico isso na prática, sem rodeio.
Calendário do mês de abril de 2005
Abril de 2005 tem 30 dias. Começou numa sexta-feira e terminou noutro sábado. Aqui está a grade completa, porque às vezes é mais fácil ver tudo de uma vez do que calcular na cabeça: Segunda: 4, 11, 18, 25
Tesla: 5, 12, 19, 26
Quarta: 6, 13, 20, 27
Quinta: 7, 14, 21, 28
Sexta: 1, 8, 15, 22, 29
Sábado: 2, 9, 16, 23, 30
Domingo: 3, 10, 17, 24
Repare que o dia 1 é sexta. Isso significa que qualquer fórmula que use 1 como referência precisa lidar com o fato de que o mês não começa na segunda. Em muitos sistemas europeus, tabelas e planilhas, a segunda é a coluna da esquerda. Se você colocar o dia 1 numa coluna de domingo, tudo desalma.
Como verificar se o calendário está certo
Eu tenho um procedimento simples. Primeiro, confiro o dia da semana inicial. Para abril de 2005, usei a regra de Zeller ou simplesmente calculei com Python. O resultado foi sexta-feira. Depois, conto os dias: abril tem sempre 30, não há exceção. Ano bissexto só afeta fevereiro. Confiro o último dia: 30 de abril foi sábado. Fecha. Um detalhe que pouca gente nota: o calendário de abril de 2005 cai num período sem feriados nacionais fixos no Brasil que alterem a estrutura de semanas. Páscoa foi a 27 de março nesse ano. Sexta-feira Santa, portanto, também em março. Isso importa porque alguns relatórios legados usam o ciclo pascal para calcular datas móveis, e se você pular essa verificação, acaba inserindo feriados errados no mês seguinte.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Um problema real que eu tive
Num projeto de migração de dados, encontrei registros com datas armazenadas como string no formato DD/MM/YYYY, mas com uma particularidade chata: o sistema original usava o dia da semana como campo de validação. Ou seja, cada linha tinha uma data e também um campo "dia_semana" que deveria corresponder. Em abril de 2005, havia cerca de 12 mil registros, e uns 300 tinham incompatibilidade. O problema era que o sistema legítimo gerava datas manualmente, sem usar funções de data do banco. Alguém digitou 01/04/2005 e colocou "segunda" no campo ao lado. Claramente errado. A correção que eu fiz foi rodar um script Python que para cada data no intervalo calculava o dia da semana correto e comparava com o valor armazenado. Registros incompatíveis iam para uma tabela de análise, não eram deletados. No final, ajustei os 300 casos manualmente, conferindo com a grade acima. Se você tiver um volume maior, dá para automatizar a correção, mas eu recomendo manter um log de tudo que foi alterado. Dados financeiros ou contratuais não perdoam.
Dicas técnicas que ninguém conta
1. Ano bissexto não toca abril. Muita gente assume que 2004 ou 2008 afetam todos os meses. Não afeta. Abril sempre tem 30 dias, independente do ano. Se seu código testa "é bissexto para decidir dias de abril", está errado. 2. Timezones podem mudar o dia da semana. Se você está trabalhando com datas globais, 1º de abril de 2005 às 00:00 no Brasil é sexta, mas às 00:00 em Tóquio já é sábado. Para calendários estáticos, isso não importa. Para sistemas que registram eventos com timestamp, importa bastante. Eu já vi relatórios dobrarem a contagem de eventos porque um arquivo tinha dados em UTC e outro em hora local sem conversão.
3. Formatos de exportação. Se você precisa gerar um calendário de abril de 2005 em CSV, use o cabeçalho padrão: data, dia_semana. Em Python, isso leva menos de 20 linhas. Em Excel, use uma célula com 01/04/2005 e arraste para baixo com formatação personalizada "dddd" para o dia da semana. Cuidado com a localização: se a planilha estiver em inglês, vai mostrar "Friday" em vez de "sexta-feira".
Limitações e quando não usar esse método
O calendário de abril de 2005 é uma data fixa. Isso é vantagem e desvantagem. Se você precisa de flexibilidade — por exemplo, gerar calendários para vários meses de 2005 —, ter uma tabela fixa não escala. Use bibliotecas de data (datetime do Python, Calendar do Java, DateTime do PHP) para gerar dinamicamente. Elas são mais confiáveis porque lidam automaticamente com fusos, anos bissextos e regras do calendário gregoriano. Outro ponto: calendários manuais não consideram feriados locais variáveis. Abril de 2005 no Brasil não teve feriados móveis, mas em outros países sim. Páscoa em 2005 foi 27 de março, mas em 2006 caiu a 16 de abril. Se o seu contexto envolve múltiplos anos, calcule sempre com uma biblioteca, não com tabela fixa.
Exemplo prático rápido
Se você quer apenas saber quantos fins de semana tem em abril de 2005, a resposta é 8: os sábados 2, 9, 16, 23, 30 e os domingos 3, 10, 17, 24. Isso é útil para cálculo de folha de pagamento, escalas de plantão ou previsão de Volume de chamados em call centers. Eu já usei esse número para estimar custo de horas extras em contratos de TI onde a equipe trabalhava em turnos rotativos. Se precisar do calendário completo em formato imprimível, a grade acima basta. Basta copiar, colar num editor e ajustar as margens. Nada de ferramentas pagas para isso.