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.

Formato 24 horas para vb.net

txtTo.Text = DateTime.Now.ToString("mm/dd/yyyy HH:mm:ss");

si agrego tt cambia a AM y PM

Dim hora As String = date1.ToString(“dd/MM/yyyy hh:mm:ss tt”)

 

Aquí hay algunos formatos:

Format(Now, “d/m/aa”) 1/12/01
Format(Now, “dddd, dd mmmm, aaaa”) sábado, 01 diciembre, 2001
Format(Now, “d-mmm”) 1-dic
Format(Now, “mmmm-aa”) diciembre-01
Format(Now, “hh:mm AM/PM”) 07:18 AM
Format(Now, “h:mm:ss a/p”) 7:18:00 a
Format(Now, “d-mmmm h:mm”) 1-diciembre 7:18

Capturar y mostrar datos de un DataGridView en Vb.Net

Buen día para todos,

Hoy quiero compartir con ustedes otro pequeño tutorial en donde aprenderemos a capturar la información de una fila en un control DataGridView y mostrarla de forma ordena y con el formato que necesitemos.

Para comenzar ya he creado un nuevo proyecto y le he agregado seis (6) controles configurados así:

  • 5 Labels: Con su propiedad Name en (LblId, LblNombres, LblApellidos, LblFecha, LblHora) y con los textos (ID:, Nombres: Apellidos:, Fecha: Hora:).
  • DataGridView: Con su propiedad Name en (DGTabla).

Una vez agregado nuestro controles, el formulario debe quedar así:

sshot-1

Ahora analicemos este código: “DGTabla.CurrentRow.Cells(0).Value”, identifiquemos cada propiedad:

  • DGTabla: Corresponde a la propiedad Name de nuestro DataGridView, el nombre de nuestro control DataGridView.
  • CurrentRow: Esta propiedad del DataGridView nos permite conocer la fila en la que estamos situados actualmente.
  • Cells(): Esta propiedad nos indica la celda en la que estamos ubicados, dentro de los paréntesis es donde nosotros indicamos en que celda nos queremos ubicar. Dentro de este paréntesis podemos indicar la posición por el número de la columna o por el nombre de la columna, como nos quede mas fácil entender y usar esta propiedad.
  • Value: Esta propiedad nos devuelve el valor de la celda que le hemos indicado.

Una vez que tenemos clara cada propiedad del procedimiento vamos a seleccionar nuestro “DGTabla” y abriremos sus propiedades, seleccionaremos la opción de “Eventos” y damos doble clic en el evento “CellClick” para escribir nuestro procedimiento. Seleccionamos este evento para que nos cargue nuestro datos cuando demos “Clic” en el “DGTabla”, si queremos que se carguen los datos cuando demos “Doble Clic” entonces seleccionamos el evento “CellDoubleClick” como se muestra en la siguiente imagen.

sshot-3
Seleccionar el evento Click

Ahora que estamos dentro del evento escribimos el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
':::Variables de tipo Date para convertir fecha y hora
Dim Fecha As Date = DGTabla.CurrentRow.Cells(3).Value
Dim Hora As Date = DGTabla.CurrentRow.Cells(4).Value
':::Capturador de errores
   Try
      ':::Asignamos el valor de cada celda al control donde lo mostraremos
      LblId.Text = "ID: " & DGTabla.CurrentRow.Cells(0).Value
      ':::Podemos asignar la celda por numero o nombre de la columna
      LblNombres.Text = "Nombres: " & DGTabla.CurrentRow.Cells("Nombres").Value
      LblApellidos.Text = "Apellidos: " & DGTabla.CurrentRow.Cells(2).Value
      ':::Damos el formato de la fecha y hora que necesitamos
      LblFecha.Text = "Fecha: " & Fecha.ToString("dd/MM/yyyy")
      LblHora.Text = "Hora: " & Hora.ToString("hh:mm tt")
   Catch ex As Exception
      MsgBox("Error en la operación: " & ex.Message)
   End Try

Como podemos observar en el código anterior estamos obteniendo los datos de las celdas por medio de su indice numérico, excepto en la del campo nombres en donde le indicamos el campo por medio del nombre de la columna (Linea 9), ahora ejecutamos nuestro proyecto y damos clic en cualquier fila, veremos como se nos muestra el valor de cada celda de esa fila en su correspondiente campo (Label).

sshot-2

Nuestro procedimiento se ejecuta correctamente y nos esta capturando los datos de la fila y los muestra de forma ordenada como se lo indicamos, ademas de esto podemos identificar en la columna “Fecha” y “Hora” que el formato que tienen es diferente al que se esta mostrando en los “Labels”, lo que quiere decir que el procedimiento también esta recibiendo la fecha y la hora, ademas les esta cambiando el formato que tienen por el que le indicamos en las (Lineas 12 y 13).

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

Buen día para todos.

 

 

AUTOR: Edward Gomez

Website Built with WordPress.com.

Up ↑