Quantos dias se passaram? Resolvendo o problema clássico em C#
\n\nImagine: você está escrevendo um aplicativo para controle de férias, um planejador de tarefas ou apenas quer saber quantos dias faltam para o Ano Novo. E surge a pergunta clássica: “Como calcular a diferença entre duas datas em C#?”. Esta é uma das perguntas mais populares no Stack Overflow, e não é à toa. Trabalhar com datas é o básico que todo desenvolvedor precisa saber.
\n\nNeste artigo, não vamos apenas dar uma resposta seca. Vamos analisar tudo com exemplos práticos, mostrar as armadilhas e ensinar você a obter o número de dias (e não só) entre quaisquer dois momentos. Vamos lá!
\n\nA maneira mais simples: subtrair uma data da outra
\n\nEm C#, para trabalhar com datas e horas, existe a poderosa estrutura DateTime. O segredo principal é que, se você subtrair um objeto DateTime de outro, você não obtém um número, mas um objeto especial — TimeSpan. É ele que armazena a diferença.
Exemplo básico: diferença em dias entre duas datas específicas
\n\nSuponha que você queira saber quantos dias se passaram entre 1º de março de 2024 e 10 de maio de 2024.
\n\nusing System;\n\nclass Program\n{\n static void Main()\n {\n // Criando duas datas\n DateTime startDate = new DateTime(2024, 3, 1);\n DateTime endDate = new DateTime(2024, 5, 10);\n\n // Calculando a diferença\n TimeSpan difference = endDate - startDate;\n\n // Obtendo o número de dias inteiros\n int days = difference.Days;\n\n Console.WriteLine($"Diferença em dias: {days}");\n // Saída: Diferença em dias: 70\n }\n}\n\n\nSimples, não é? O operador - está sobrecarregado para DateTime e retorna um TimeSpan. A propriedade .Days retorna o número inteiro de dias (sem considerar horas, minutos e segundos).
Calculando a diferença com “hoje”
\n\nMuitas vezes é necessário calcular quantos dias se passaram desde algum evento até o momento atual. Para isso, usamos DateTime.Now ou DateTime.Today.
DateTime today = DateTime.Today; // Apenas a data, hora 00:00\nDateTime someDay = new DateTime(2025, 1, 1); // 1º de janeiro de 2025\n\nTimeSpan diff = someDay - today;\n\nConsole.WriteLine($"Faltam {diff.Days} dias para o Ano Novo");\n\n\nObserve: DateTime.Today retorna a data atual com a hora definida como 00:00:00. Isso é útil se horas e minutos não são importantes para você.
E se você precisar de mais do que apenas dias?
\n\nA estrutura TimeSpan não é apenas .Days. Ela tem outras propriedades úteis que podem ser usadas se você quiser expandir a funcionalidade.
- \n
.Days— número de dias inteiros. \n .Hours— horas (de 0 a 23). \n .Minutes— minutos. \n .Seconds— segundos. \n .TotalDays— número total de dias como um número fracionário (por exemplo, 70.5). \n .TotalHours— número total de horas. \n
Exemplo com TotalDays
\n\nImagine que a diferença entre as datas seja exatamente 36 horas. A propriedade .Days mostrará 1 (porque é um dia inteiro e 12 horas). Já .TotalDays mostrará 1.5.
DateTime start = new DateTime(2024, 1, 1, 0, 0, 0);\nDateTime end = new DateTime(2024, 1, 2, 12, 0, 0); // 1º de janeiro + 1 dia e 12 horas\n\nTimeSpan span = end - start;\n\nConsole.WriteLine($"Dias (inteiros): {span.Days}"); // 1\nConsole.WriteLine($"Total de dias: {span.TotalDays}"); // 1.5\n\n\nSe a sua tarefa é apenas saber o número de dias completos, use .Days. Se precisar de um valor exato com frações, use
Blogs
Book Recommendations
Leia também
Como passar em uma entrevista de Swift: perguntas avançadas
let vs var em JavaScript: o que escolher para velocidade e código?
Principais erros de desenvolvedores Rust iniciantes: como evitá-los
Segurança de aplicações TypeScript: top-10 vulnerabilidades para iniciantes
C# sob o capô: como acelerar o código com profiling