Arquivos do Blog

Subtraindo datas com TimeSpan em C#

Olá pessoal!

Hoje vou falar um pouco sobre o TimeSpan, segundo a Microsoft um objeto do tipo TimeSpan representa um intervalo de tempo, que pode ser medido como um número positivo ou negativo de dias, horas, minutos, segundos (e suas frações). Ainda diz que pode ser utilizado para representar horas, mais somente se o horário não estiver relacionado a alguma data, pois nesses casos deve-se utilizar a estrutura DateTime ou DateTimeOffSet.

Abaixo segue um simples exemplo de como subtrair duas datas (DateTime) e obter o resultado da diferença entre elas utilizando o TimeSpan, obtendo através dele a diferença em dias, horas, minutos, segundos e milissegundos entre as datas.


//Instância da dataUm
DateTime dataUm = Convert.ToDateTime("25/12/2012 01:00:00");

//Instância da dataDois
DateTime dataDois = Convert.ToDateTime("01/01/2013 02:00:00");

//Instância do TimeSpan recebendo a subtração entre as datas
TimeSpan ts = dataDois.Subtract(dataUm);

//Para obter a diferença em dias
Console.WriteLine("Diferença em dias: {0}", ts.TotalDays);

//Para obter a diferença em horas
Console.WriteLine("Diferença em horas: {0}", ts.TotalHours);

//Para obter a diferença em minutos
Console.WriteLine("Diferença em Minutos: {0}", ts.TotalMinutes);

//Para obter a diferença em segundos
Console.WriteLine("Diferença em segundos: {0}", ts.TotalSeconds);

//Para obter a diferença em milissegundos
Console.WriteLine("Diferença em milissegundos: {0}", ts.TotalMilliseconds);

Ainda utilizando o TimeSpan é possível “acumular” a diferença entre datas, afim de se obter um total de um determinado período, segue um exemplo abaixo:


//Instância do TimeSpan que armazenará o resultado do período
 TimeSpan tsResultado;

//Instância da diaUmInicial
 DateTime diaUmInicial = Convert.ToDateTime("25/12/2012 01:00:00");

//Instância da diaUmFinal
 DateTime diaUmFinal = Convert.ToDateTime("25/12/2012 02:00:00");

//Vinculando a diferença entre as datas
 tsResultado = (diaUmFinal.Subtract(diaUmInicial));

//Instância da diaDoisInicial
 DateTime diaDoisInicial = Convert.ToDateTime("24/12/2012 01:00:00");

//Instância da diaDoisFinal
 DateTime diaDoisFinal = Convert.ToDateTime("25/12/2012 01:00:00");

//Vinculando a diferença entre as datas adicionando-as
 tsResultado += (diaDoisFinal.Subtract(diaDoisInicial));

 Console.WriteLine("O resultado é: {0} dia(s), {1} hora(s), {2} minuto(s).",
                tsResultado.TotalDays, tsResultado.TotalHours, tsResultado.TotalMinutes);

Até a próxima!