pontoNETpt
A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.
DateDiff no C#

Como este é o primeiro post do ano, desejo a todos um feliz 2006!!!
Bom... vamos voltar ao assunto.
Pois é, apesar do VB.Net possuir o DateDiff o C# não tem.
Para contornar este problema podemos utilizar a seguinte função:

  /// DateDiff para C#
  /// Indica qual será o retorno [0 = Dias, 1 = Meses, 2 = Anos]
  /// Data Inicial
  /// Data Final
  /// Retorna a diferença de acordo com o Intervalo escolhido
  ///

  public double dateDiff( int interval, DateTime date1, DateTime date2)
  {
   TimeSpan tsDuration;
   tsDuration = date2 - date1;

   if( interval == 0 )
   {
      // Resultado em Dias
      return Convert.ToDouble( tsDuration.Days );
   }
   else if( interval == 1 )
   {
      // Resultado em Meses
      return Convert.ToDouble( ( Convert.ToDouble( tsDuration.Days ) / 365 ) * 12 ) ;
   }
   else if( interval == 2 )
   {
      // Resultado em Anos
      return Convert.ToDouble( ( Convert.ToDouble( tsDuration.Days ) / 365) );
   }
   else {
      return 0;
   }
  }

Achei uma parte dessa função na internet e adaptei as minhas necessidades. Adapte a sua e seja feliz!!! :)

Abraços,
Pedro

PS.: Não testei essa função direito, na verdade só uso o retorno em dias. Caso encontre algum problema ou faça um upgrade nela, me manda uma msg!!!

ATENÇÃO: Atualizei a função em: 27/01/2006.

 


Posted 26-1-2006 13:15 por Pedro Antonio Seixas Subutzki

Comments

Anonymous wrote re: DateDiff no C#
on 1-7-2009 2:20
Essa tua função tem diversos problemas nomeadamente nem todos os meses tem 30 dias e nem todos os anos tem 360 dias
Anonymous wrote re: DateDiff no C#
on 1-7-2009 2:20
Ola Pedro

o que tu precisas é do método Subtract da class DateTime.

DateTime myDate1 = DateTime.UtcNow;
DateTime myDate2 = DateTime.UtcNow.AddDays(2);
TimeSpan difference = myDate2.Subtract(myDate1);


É por causa destas e doutras que eu sou contra as "funções" do VB que encapsulam a framework... :)
Anonymous wrote re: DateDiff no C#
on 1-7-2009 2:20
<bitaite>
Bem, em vez do método Subtract podes sempre fazer myDate2 - myDate1. Também é retornado um TimeSpan. :P
</bitaite>

Anonymous wrote re: DateDiff no C#
on 1-7-2009 2:20
Na verdade galera, isso foi pra polemizar um pouco mesmo. :)
Podemos pegar a diferença entre datas de diversas formas...
Pra retornar o mês por exemplo eu poderia dividir por 365 e multiplicar por 12... mas como disse o Pedro Rainho, todos os anos não tem 365 dias exatamente. :)
Pra retornar a diferença em anos poderia fazer algo do tipo:
return ( 12 * (Date1.Year - Date2.Year) + Date1.Month - Date2.Month );

De qualquer maneira, poderiamos até resolver isso adicionando uma referência ao namespace Microsoft.VisualBasic e utilizar o próprio DateDiff do VB.NET!!! :)

O que vocês acham?
Anonymous wrote re: DateDiff no C#
on 1-7-2009 2:20
<Answer messageRelated="bitaite@PedroSousa">
ehehhe!

Bem lembrado. Mas o IL é o mesmo :P
</Answer>

<Answer messageRelated="Pedro Subutzki">
Vai por mim.. não faças isso :)
Já viste o código da class Microsoft.VisualBasic.DateAndTime? Nomeadamente o método DateDiff?
</Answer>
Anonymous wrote re: DateDiff no C#
on 1-7-2009 2:20
<return ( 12 * (Date1.Year - Date2.Year) + Date1.Month - Date2.Month );>

a função acima também tem um problema pois se os mêses forem iguais?
Anonymous wrote re: DateDiff no C#
on 2-7-2009 2:19
Essa tua função tem diversos problemas nomeadamente nem todos os meses tem 30 dias e nem todos os anos tem 360 dias
Anonymous wrote re: DateDiff no C#
on 2-7-2009 2:19
Ola Pedro

o que tu precisas é do método Subtract da class DateTime.

DateTime myDate1 = DateTime.UtcNow;
DateTime myDate2 = DateTime.UtcNow.AddDays(2);
TimeSpan difference = myDate2.Subtract(myDate1);


É por causa destas e doutras que eu sou contra as "funções" do VB que encapsulam a framework... :)
Anonymous wrote re: DateDiff no C#
on 2-7-2009 2:19
<bitaite>
Bem, em vez do método Subtract podes sempre fazer myDate2 - myDate1. Também é retornado um TimeSpan. :P
</bitaite>

Anonymous wrote re: DateDiff no C#
on 2-7-2009 2:19
Na verdade galera, isso foi pra polemizar um pouco mesmo. :)
Podemos pegar a diferença entre datas de diversas formas...
Pra retornar o mês por exemplo eu poderia dividir por 365 e multiplicar por 12... mas como disse o Pedro Rainho, todos os anos não tem 365 dias exatamente. :)
Pra retornar a diferença em anos poderia fazer algo do tipo:
return ( 12 * (Date1.Year - Date2.Year) + Date1.Month - Date2.Month );

De qualquer maneira, poderiamos até resolver isso adicionando uma referência ao namespace Microsoft.VisualBasic e utilizar o próprio DateDiff do VB.NET!!! :)

O que vocês acham?
Anonymous wrote re: DateDiff no C#
on 2-7-2009 2:19
<Answer messageRelated="bitaite@PedroSousa">
ehehhe!

Bem lembrado. Mas o IL é o mesmo :P
</Answer>

<Answer messageRelated="Pedro Subutzki">
Vai por mim.. não faças isso :)
Já viste o código da class Microsoft.VisualBasic.DateAndTime? Nomeadamente o método DateDiff?
</Answer>
Anonymous wrote re: DateDiff no C#
on 2-7-2009 2:19
<return ( 12 * (Date1.Year - Date2.Year) + Date1.Month - Date2.Month );>

a função acima também tem um problema pois se os mêses forem iguais?

Add a Comment

(requerido)  
(opcional)
(requerido)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems