Suma – Resta de fechas y horas con DatetimePicker en Vb.Net

 

Buen día para todos,

En este día quiero compartir otro pequeño tutorial en el que aprenderemos a realizar las operaciones de suma y resta tanto a fechas como a las horas mediante el uso del control DateTimePicker en Vb.Net, lo que nos resulta muy importante a la hora de obtener rangos de fecha u horarios dependiendo del proyecto que estemos desarrollando.

Para comenzar ya he creado un proyecto que he llamado “Tutorial_Rango_Fecha_Hora”, al cual le he agregado los siguiente controles:

  • 4 DateTimePicker: En la propiedad “Name” (DtpFechaInicio, DtpFechaFinal, DtpHoraInicio, DtpHoraFinal), para los controles de fecha en su propiedad “Format” (Short) y los controles de tipo hora en su propiedad “Format” (Time) y la propiedad “ShowUpDown” (True).
  • 4 NumericUpDown: En la propiedad “Name” (NudFechaInicio, NudFechaFinal, NudHoraInicio, NudHoraFinal).
  • 1 Button: En la propiedad “Name” (BtnCalcular) y la propiedad “Text” (Calcular Resultados).
  • 10 Labels: En la propiedad “Name” (LblCantidadDias, LblCantidadMeses, LblCantidadAños, LblSumaDias, LblRestaDias, LblCantidadHoras, LblCantidadMinutos, LblCantidadSegundos, LblSumaMinutos, LblRestaMinutos).

Una vez finalizado nuestro formulario debería tener una apariencia similar a la siguiente:

sshot-1
Formulario de Ejemplo

Para continuar debemos conocer un poco la función “DateDiff”, la cual Devuelve un valor Long que especifica el número de intervalos de tiempo entre dos valores Date, ahora que sabemos para que nos sirve les dejo un link en donde encontraran información mas detalla de sus características y uso.

Función DateDiff

Como podemos identificar en el enlace anterior la función DateDiff necesita de unos parámetros para que se ejecute correctamente, para nuestro ejemplo solo explicare los que son obligatorios, los cuales son:

  • Interval: Es de carácter obligatorio y representa el intervalo de tiempo que se desea utilizar como unidad de diferencia entre Date1 y Date2.
  • Date1: Es de carácter obligatorio y corresponde al primer valor de fecha u hora que se desea utilizar en el cálculo.
  • Date2: Es de carácter obligatorio y corresponde al segundo valor de fecha u hora que se desea utilizar en el cálculo.
sshot-2
Valores que puede tomar el parámetro Interval

También utilizaremos los métodos del control “DateTimePicker” correspondiente como son:

  • DateTime.AddDays: El cual suma el número especificado de días al valor de esta instancia.
  • DateTime.AddMinutes: El cual suma el número especificado de minutos al valor de esta instancia.

De igual manera les comparto los link en donde encontraran mas información sobre el uso de estos métodos.

Método DateTime.AddDays

Método DateTime.AddMinutes

Ahora que hemos definido la función y los métodos que emplearemos en el ejemplo pasaremos a crear dos funciones, una para los procesos de fechas y la otra para los procesos de horas; comenzaremos con la función de fechas y la llamaremos “Calcular_Fechas” dentro de esta función escribiremos el siguiente código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
':::Funcion para realizar las operaciones con las fechas
    Sub Calcular_Fechas()
        ':::Obtenemos las fechas en formato DATE
        ':::Observese que al final del valor despues de Value agrego ToShortDateString, esto con el fin de que me tome
        ':::Solo el valor de la fecha y me omita el valor de la hora
        Dim Fechainicio As Date = DtpFechaInicio.Value.ToShortDateString
        Dim FechaFinal As Date = DtpFechaFinal.Value.ToShortDateString
        ':::Calculamos la diferencia de dias entre las 2 fechas
        LblCantidadDias.Text = DateDiff(DateInterval.Day, Fechainicio, FechaFinal)
        ':::Calculamos la diferencia de meses entre las 2 fechas
        LblCantidadMeses.Text = DateDiff(DateInterval.Month, Fechainicio, FechaFinal)
        ':::Calculamos la diferencia de años entre las 2 fechas
        LblCantidadAños.Text = DateDiff(DateInterval.Year, Fechainicio, FechaFinal)
        ':::Calculamos la fecha inicio sumando los dias indicados
        LblSumaDias.Text = Fechainicio.AddDays(NudFechaInicio.Value)
        ':::Calculamos la fecha final restando los dias indicados, observese que le agregue un signo menos
        ':::Al valor obtenido del control NudFechaFinal
        LblRestaDias.Text = FechaFinal.AddDays(-NudFechaFinal.Value)
    End Sub

Para continuar crearemos la función para los procesos de horas, la cual llamaremos “Calcular_Horas” y dentro de la cual escribiremos el siguiente código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
':::Funcion para realizar las operaciones con las horas
    Sub Calcular_Horas()
        ':::Obtenemos las horas en formato DATE
        ':::Observese que al final del valor despues de Value agrego ToLongTimeString, esto con el fin de que me tome
        ':::Solo el valor de la hora y me omita el valor de la fecha
        Dim HoraInicio As Date = DtpHoraInicio.Value.ToLongTimeString
        Dim HoraFinal As Date = DtpHoraFinal.Value.ToLongTimeString
        ':::Calculamos la diferencia de horas entre las 2 horas
        LblCantidadHoras.Text = DateDiff(DateInterval.Hour, HoraInicio, HoraFinal)
        ':::Calculamos la diferencia de minutos entre las 2 horas
        LblCantidadMinutos.Text = DateDiff(DateInterval.Minute, HoraInicio, HoraFinal)
        ':::Calculamos la diferencia de segundos entre las 2 horas
        LblCantidadSegundos.Text = DateDiff(DateInterval.Second, HoraInicio, HoraFinal)
        ':::Calculamos la hora inicio sumando los minutos indicados
        LblSumaMinutos.Text = HoraInicio.AddMinutes(NudHoraInicio.Value).ToLongTimeString
        ':::Calculamos la hora final restando los minutos indicados, observese que le agregue un signo menos
        ':::Al valor obtenido del control NudHoraFinal
        LblRestaMinutos.Text = HoraFinal.AddMinutes(-NudHoraFinal.Value).ToLongTimeString
    End Sub

Como podemos observar su aplicación es muy sencilla y para los casos en los que necesitamos agregar ya sea días o minutos, segundos… el valor sera positivo y en el caso que se quiera restar el valor sera negativo.

Para terminar llamamos nuestras funciones desde el botón que hemos creado, para lo cual damos doble clic en el control y escribimos el siguiente código.

1
2
3
4
5
Private Sub BtnCalcular_Click(sender As Object, e As EventArgs) Handles BtnCalcular.Click
   ':::Llamamos las funciones creadas
   Calcular_Fechas()
   Calcular_Horas()
End Sub

Realizamos una prueba para verificar que nuestro procedimientos se ejecutan correctamente.

sshot-3
Resultados

Como podemos observar todo funciona correctamente, los procedimientos reciben los parámetros y se ejecutan retornando los resultados esperados.

Como siempre dejare el proyecto en un enlace de Mega para que lo descarguen y estudien mas detenidamente.

https://goo.gl/fC6qbF

 

Cualquier duda estaré presto a colaborar en todo lo que me este posible.

Buen día para todos.

Leave a comment

Website Built with WordPress.com.

Up ↑