Buscar en este blog....

jueves, 2 de octubre de 2008

Restar fechas en C#

Para comprobar el vencimiento de una fecha, es una buena idea usar la clase TimeSpan que provee la plataforma .NET. En mi caso, estoy usando la fecha de vencimiento del tipo DateTime, con lo cual en un princpio tuve problemas para hacer una resta de esa fecha con la fecha actual.

Foreando encontré varias propuestas que al menos a mi, no me funcionaron, ya que intentaban usar el metodo Substract de la clase DateTime, con un parametro DateTime; y esto no es posible porque -según mi compilador- no podia convertir DateTime en TimeSpan. Lo extraño, es que este metodo esta sobrecargado para aceptar ambos tipos de datos...

Pero en fin, una manera sencilla -y a mi gusto muy prolija- de hacerlo, es implementando un metodo al que podemos llamar, por ej, ObtenerDias y que le pasemos como argumento dos fechas (de tipo DateTime). Lo que nos devuleve es la diferencia en días entre dichas fechas. ( Obviamente, bien podría ser la diferencia en meses, años, segundos etc..)


public double ObtenerDias( DateTime Fecha1, DateTime Fecha2)
{
TimeSpan T1, T2;
double diff;

T1 = new TimeSpan( Fecha1.Ticks );
T2 = new TimeSpan( Fecha2.Ticks );

diff = ( T1.Substract(T2) ).TotalDays;

return diff;
}


La clase TimeSpan tiene la propiedad 'Ticks' como unidad de medida. Solo obtenemos los ticks de cada fecha, los restamos y mediante la propiedad TotalDays obtenemos la cantidad total de días entre ambas fechas. Logicamente se puede obtener TotalYears, TotalMinutes, etc.. Pero hay que tener cuidado con la propiedad 'Days' que no es lo mismo que 'TotalDays', ya que Days solo mide la cantidad de dias que corresponden al mes del año de la diferencia entre ambas fechas.. Por ejemplo:

si TotalDays = 35, entonces Days = 4 debido a que los 31 dias anteriores, corresponden al mes anterior y no se cuentan en el mes del ultimo de los 35 dias.

Me agradaría saber si esto les ha resultado de interés y si les ha servido. Saludos!

3 comentarios:

  1. Hola que tal...muy util, pero me gustaria saber com puedo obtener los meses y años, ya que TimeSpan no cuenta con TotalMonths, ni TotalYears....por favor ayudame con esto, te estare muy agradecido....

    Att. Lionel 8D

    ResponderEliminar
  2. Gracias me sirvio de mucho
    un gran saludoo byee

    ResponderEliminar
  3. Que tal, me parece muy interesante tu blogs, tengo una pregunta por hacerte, como hago para restar dos fechas con el control DateTimePicker y este resultado enviarlo a un TEXTBOX, esto es para calcular la edad de una persona, muchas gracias si me puedes colaborar

    ResponderEliminar

Comments are subject to moderation, only in order to avoid insults and disguising things.

Los comentarios están sujetos a moderación, solo con el fin de evitar insultos y cosas por el estilo.