Principales respuestas
Restar dos variables que contienen fechas

Pregunta
-
Quisiera saber como restar dos variables que tienen almacenadas dos fechas
If readerultimafecha2.Read = True Then
fechadespacho = Convert.ToString(readerultimafecha2("FechaDespacho").ToString)
fechaingresoultima = Convert.ToString(readerultimafecha2("Ingreso").ToString)
End If
fechadespacho = 30/10/2011 10:12:04fechaingresoultima = 14/10/2011 10:12:04Saludos y graciaslunes, 17 de octubre de 2011 14:12
Respuestas
-
"Emanuel Jimenez" escribió:
> Funciono perfecto.
¿Estás seguro? :-)
Te funcionará perfecto siempre y cuando los campos 'FechaDespacho' e 'Ingreso' del supuesto objeto DataReader llamado 'readerultimafecha2' no contengan un valor NULL (que es un valor distinto a Nothing), y su valor se pueda convertir a DateTime.
Pero si los valores son NULL, me parece a mí que no vas a poder convertir el valor a DateTime. ;-)
Dim fechadespacho As DateTime = _
Convert.ToDateTime(Convert.ToString(DBNull.Value))En este caso se obtendrá una excepción del tipo FormatException porque la cadena no se puede reconocer como un valor DateTime válido. Da igual que utilices la función CStr como el método ToString de la clase Convert.
Tienes que detectar primero los posibles valores NULL y actuar en consecuencia:
Dim value As Object = readerultimafecha2("FechaDespacho")
Dim fechaDespacho As DateTime
If (value IsNot DBNull.Value) Then
fechaDespacho = Convert.ToDateTime(value)
End IfY lo mismo tendrás que hacer con la variable 'fechaingresoultima'. Cuando tengas los dos valores DateTime válidos, es cuando tienes que efectuar la resta:
Dim diferencia As TimeSpan = fechaingresoultima.Substract(fechaDespacho)
Pero ésto sirve únicamente para evitar los posibles valores NULL existentes, no así para aquellos valores NO NULL que no se puedan convertir a DateTime. Pero ésto ya es obligación tuya de que a la hora de insertar los valores en la base de datos, tengan un valor DateTime válido.Adapta los ejemplos a tu código.
Un saludo
NOTA: si esta respuesta te ha resultado útil, no olvides marcarla como satisfactoria.
Enrique Martínez
[MS MVP - VB]Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.
- Propuesto como respuesta Enrique M. MontejoModerator lunes, 17 de octubre de 2011 17:18
- Marcado como respuesta Emanuel Jimenez lunes, 17 de octubre de 2011 17:23
lunes, 17 de octubre de 2011 15:25Moderador -
hola
pero no deberias convertirlas en DateTime para poder operar con fechas ?
o sea
If readerultimafecha2.Read = True Then Dim fechadespacho As DateTime = Convert.ToDateTime(CStr(readerultimafecha2("FechaDespacho"))) Dim fechaingresoultima As DateTime = Convert.ToDateTime(CStr(readerultimafecha2("Ingreso"))) Dim resta As TimeSpan = fechaingresoultima.Substract(fechadespacho) txtDias.Text = resta.Days End If
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Leandro TuttiniMVP lunes, 17 de octubre de 2011 17:05
- Marcado como respuesta Emanuel Jimenez lunes, 17 de octubre de 2011 17:22
lunes, 17 de octubre de 2011 14:16 -
Funciono perfecto, muchas gracias
Saludos
- Marcado como respuesta Emanuel Jimenez lunes, 17 de octubre de 2011 17:23
lunes, 17 de octubre de 2011 15:06
Todas las respuestas
-
hola
pero no deberias convertirlas en DateTime para poder operar con fechas ?
o sea
If readerultimafecha2.Read = True Then Dim fechadespacho As DateTime = Convert.ToDateTime(CStr(readerultimafecha2("FechaDespacho"))) Dim fechaingresoultima As DateTime = Convert.ToDateTime(CStr(readerultimafecha2("Ingreso"))) Dim resta As TimeSpan = fechaingresoultima.Substract(fechadespacho) txtDias.Text = resta.Days End If
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Leandro TuttiniMVP lunes, 17 de octubre de 2011 17:05
- Marcado como respuesta Emanuel Jimenez lunes, 17 de octubre de 2011 17:22
lunes, 17 de octubre de 2011 14:16 -
Funciono perfecto, muchas gracias
Saludos
- Marcado como respuesta Emanuel Jimenez lunes, 17 de octubre de 2011 17:23
lunes, 17 de octubre de 2011 15:06 -
"Emanuel Jimenez" escribió:
> Funciono perfecto.
¿Estás seguro? :-)
Te funcionará perfecto siempre y cuando los campos 'FechaDespacho' e 'Ingreso' del supuesto objeto DataReader llamado 'readerultimafecha2' no contengan un valor NULL (que es un valor distinto a Nothing), y su valor se pueda convertir a DateTime.
Pero si los valores son NULL, me parece a mí que no vas a poder convertir el valor a DateTime. ;-)
Dim fechadespacho As DateTime = _
Convert.ToDateTime(Convert.ToString(DBNull.Value))En este caso se obtendrá una excepción del tipo FormatException porque la cadena no se puede reconocer como un valor DateTime válido. Da igual que utilices la función CStr como el método ToString de la clase Convert.
Tienes que detectar primero los posibles valores NULL y actuar en consecuencia:
Dim value As Object = readerultimafecha2("FechaDespacho")
Dim fechaDespacho As DateTime
If (value IsNot DBNull.Value) Then
fechaDespacho = Convert.ToDateTime(value)
End IfY lo mismo tendrás que hacer con la variable 'fechaingresoultima'. Cuando tengas los dos valores DateTime válidos, es cuando tienes que efectuar la resta:
Dim diferencia As TimeSpan = fechaingresoultima.Substract(fechaDespacho)
Pero ésto sirve únicamente para evitar los posibles valores NULL existentes, no así para aquellos valores NO NULL que no se puedan convertir a DateTime. Pero ésto ya es obligación tuya de que a la hora de insertar los valores en la base de datos, tengan un valor DateTime válido.Adapta los ejemplos a tu código.
Un saludo
NOTA: si esta respuesta te ha resultado útil, no olvides marcarla como satisfactoria.
Enrique Martínez
[MS MVP - VB]Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.
- Propuesto como respuesta Enrique M. MontejoModerator lunes, 17 de octubre de 2011 17:18
- Marcado como respuesta Emanuel Jimenez lunes, 17 de octubre de 2011 17:23
lunes, 17 de octubre de 2011 15:25Moderador -
Muchas gracias, es importante tener en cuenta los valores NULL. Voy a agregarle esto
Saludos
lunes, 17 de octubre de 2011 17:26