Si comparas fechas, mejor usa TimeSpan en vez de Substract

 

Pues eso… estaba haciendo unas comprobaciones para mostrar un aviso después de pasado cierto tiempo, por ejemplo, si han pasado varias horas o minutos entre dos fechas, concretamente entre una fecha almacenada y la otra la fecha y hora actual.

Lo que en un principio se me ocurrió es hacer uso del método Substract de la clase DateTime (también Date para Visual Basic) y mirar si, por ejemplo, había al menos una diferencia de 5 minutos, algo así:

VB:

If fecha1.Subtract(fecha2).Minutes > 5 Then

C#:

if (fecha1.Subtract(fecha2).Minutes > 5)

El problema es que esto solamente comprueba si en la información de los minutos de las dos fechas hay esa diferencia una vez que a los minutos de la fecha2 se le resten los minutos de la fecha1.

Sí, está claro, así es como debe funcionar.

Pero ¿qué pasa si los minutos no se diferencian en 5 pero la fecha completa (fecha1) es mayor que la otra (fecha2) en al menos un día (o solo una hora)?

Pasa que Substract falla.

Si lo que en realidad queremos es comprobar si entre dos fechas ha pasado cierto periodo de tiempo, por ejemplo los 5 minutos de este ejemplo, pero comprobando las fechas y horas al completo, (es decir, si ha pasado más de un día, quiere decir que ha pasado más de 5 minutos), entonces deberíamos usar TimeSpan.

Este es el código a usar:

VB:

' con TimeSpan tiene en cuenta la fecha completa
Dim tsMinutos As New TimeSpan(0, 5, 0)
Dim tsDif = fecha1.Subtract(fecha2)
If tsDif > tsMinutos Then
    bAvisado = True
End If

 

C#:

// con TimeSpan tiene en cuenta la fecha completa
TimeSpan tsMinutos = new TimeSpan(0, 5, 0);
var tsDif = fecha1.Subtract(fecha2);
if (tsDif > tsMinutos)
{
    bAvisado = true;
}

 

Captura usando estas dos fechas:

fecha1 = New DateTime(2014, 11, 19, 16, 26, 0)

fecha2 = New DateTime(2010, 10, 12, 7, 26, 0)

Comparar_DateTime

 

Y esto es todo…

Si quieres ver el código al completo (aplicación de consola) tanto para Visual Basic como para C#, sigue este enlace a mi sitio de descargas:

Fichero con el código de ejemplo.

Nombre: Comparar_DateTime.zip

Tamaño: 21,3 KB

MD5 checksum: 78025D0A1B2DE530C46735E5288A4071

 

Nos vemos

Guillermo

Esta entrada fue publicada en cosas técnicas, mis cosas y etiquetada , , , , . Guarda el enlace permanente.

4 respuestas a Si comparas fechas, mejor usa TimeSpan en vez de Substract

  1. Peni dijo:

    Cierto, pero has probado con TotalMinutes?
    If fecha1.Subtract(fecha2).TotalMinutes > 5 Then

Los comentarios están cerrados.