Como calcular a diferença entre datas em C#: número de dias

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Quantos dias se passaram? Resolvendo o problema clássico em C#

\n\n

Imagine: 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\n

Neste 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\n

A maneira mais simples: subtrair uma data da outra

\n\n

Em 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.

\n\n

Exemplo básico: diferença em dias entre duas datas específicas

\n\n

Suponha que você queira saber quantos dias se passaram entre 1º de março de 2024 e 10 de maio de 2024.

\n\n
using 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\n

Simples, 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).

\n\n

Calculando a diferença com “hoje”

\n\n

Muitas vezes é necessário calcular quantos dias se passaram desde algum evento até o momento atual. Para isso, usamos DateTime.Now ou DateTime.Today.

\n\n
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\n

Observe: 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ê.

\n\n

E se você precisar de mais do que apenas dias?

\n\n

A estrutura TimeSpan não é apenas .Days. Ela tem outras propriedades úteis que podem ser usadas se você quiser expandir a funcionalidade.

\n\n
    \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
\n\n

Exemplo com TotalDays

\n\n

Imagine 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.

\n\n
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\n

Se 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