none
¿Cómo obtengo la hora actual (solo horas) y cómo le sumo a esa hora actual una cantidad fija de horas (en formato am/pm)? RRS feed

  • Pregunta

  • Ejemplo de lo que deseo (VB NET 2015):

    --------------------------------------

    Dim fHoraActual, fHoraActualEntera, fHoraActualEnteraIncrementada As DateTime

    (no sé si DateTime es el tipo adecuado, corregir porfa si no es así)

    .

    ------------------------------

    fHoraActual = Now  (por ejemplo 10:35 a.m. o el formato que devuelva)

    fHoraActualEntera =               'Aqui deseo obtener 10 a.m. (la hora actual, pero solo entero (horas) y en formato am/pm)

    fHoraActualEnteraIncrementada = fHoraActualEntera + (Aquí deseo sumar una cantidad entera de horas, por ejemplo 2 horas)

    -------------------------------

    Finalmente (según lo anterior) fHoraActualIncrementada debe contener 10 a.m. + 2 horas = 12 p.m.

    (hora entera y en formato am/pm).

    .

    .

    .

    ----------------------------------

    Aprovecho en hacer otra consultita más sobre horas:

    --------------------

    ¿Cómo escribo el código correcto para hacer esta comparación literal de horas?:

    Digamos que obtengo la hora entera actual con el código que me brindaron de la consulta anterior y lo almaceno fHora, la comparación que deseo hacer es (lo pongo en pseudocódigo):

    ------------------------------

    SI (fHora > = 10 a.m.) y (fHora < 12 p.m.) ENTONCES

        Mensaje "hora cumplida"
    FIN_DE_SI








    • Editado James-2016 lunes, 16 de mayo de 2016 0:28
    lunes, 16 de mayo de 2016 0:21

Respuestas

  • Hola,

    Básicamente las horas se manejan en Datetime, en sí asi también se pueden sumar o disminuir, según sea el caso. El formato am/pm o AM/PM varía según la cultura, eso lo tienes que especificar.

    - Creo una hora en particular, como no voy a usar la fecha, le asigno el mínimo valor.

            Dim hora1 As DateTime = DateTime.MinValue.AddHours(10)
    
            TextBox1.Text = hora1
            'Resultado =>  10:00:00

    Ya tengo la hora, ahora para mostrar en pantalla tengo que especificar la cultura (CultureInfo) que debe darme el formato.

    -hh:mm tt donde hh es la hora, mm los minutos y tt es am/ap

            TextBox1.Text = hora1.ToString("hh:mm tt", CultureInfo.CreateSpecificCulture("es-PE"))
            'Resultado =>  10:00 a.m.
    
            TextBox1.Text = hora1.ToString("hh:mm tt", CultureInfo.InvariantCulture)
            'Resultado =>  10:00 AM

    Ahora, si a mi variable hora1 (que tiene el valor 10:00:00) le quiero sumar 2 horas.

            TextBox1.Text = hora1.AddHours(2).ToString("hh:mm tt", CultureInfo.InvariantCulture)
            'Resultado =>  12:00 PM   (InvariantCulture)
            'Resultado =>  12:00 p.m. (Cultura Perú - CreateSpecificCulture("es-PE")))

    Pregunta 2 :

    No necesitas comparar las horas en ese formato, ya que como te menciono lo puedes hacer directamente desde el DateTime. Si tienes una hora en formato hh:mm tt , puedes usar el DateTime.TryParseExact

    Pero en este ejemplo no creo conveniente que lo necesites, solo guardarías en una variable DateTime y listo.

            Dim hora1 As DateTime = DateTime.MinValue.AddHours(1) '01:00
    
            Dim otraHora1 As DateTime = DateTime.MinValue.AddHours(10) '10:00
            Dim otraHora2 As DateTime = DateTime.MinValue.AddHours(12) '12:00
    
            If hora1 >= otraHora1 And
                    hora1 < otraHora2 Then
                MessageBox.Show("Hora cumplida")
            Else
                MessageBox.Show("Es otra hora : " & hora1.ToString("hh:mm tt", CultureInfo.InvariantCulture))
                'Resultado => Es otra hora : 01:00 AM
            End If

    Saludos.



    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 lunes, 16 de mayo de 2016 4:19
    lunes, 16 de mayo de 2016 1:10
  • Hola,

    Puedes usar TimeSpan.

            Dim hora1 As TimeSpan = New TimeSpan(11, 0, 0) '11:00 am
    
            Dim otraHora1 As TimeSpan = DateTime.MinValue.AddHours(10).TimeOfDay '10:00 am
            Dim otraHora2 As TimeSpan = DateTime.MinValue.AddHours(12).TimeOfDay '12:00 pm
    
            If hora1.Hours >= otraHora1.Hours And
               hora1.Hours < otraHora2.Hours Then
                MessageBox.Show("Hora cumplida")
            Else
                MessageBox.Show("Es otra hora : " & hora1.Hours )
            End If

    Si ejecutas esto si te mostrará el mensaje "hora cumplida", ya que 11:00 am es > a 10 y menor a 12.

    Si quieres obtener el tiempo actual :

    Dim hora1 As TimeSpan = Now.TimeOfDay

    Saludos.




    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 lunes, 16 de mayo de 2016 4:19
    lunes, 16 de mayo de 2016 4:11

Todas las respuestas

  • Hola,

    Básicamente las horas se manejan en Datetime, en sí asi también se pueden sumar o disminuir, según sea el caso. El formato am/pm o AM/PM varía según la cultura, eso lo tienes que especificar.

    - Creo una hora en particular, como no voy a usar la fecha, le asigno el mínimo valor.

            Dim hora1 As DateTime = DateTime.MinValue.AddHours(10)
    
            TextBox1.Text = hora1
            'Resultado =>  10:00:00

    Ya tengo la hora, ahora para mostrar en pantalla tengo que especificar la cultura (CultureInfo) que debe darme el formato.

    -hh:mm tt donde hh es la hora, mm los minutos y tt es am/ap

            TextBox1.Text = hora1.ToString("hh:mm tt", CultureInfo.CreateSpecificCulture("es-PE"))
            'Resultado =>  10:00 a.m.
    
            TextBox1.Text = hora1.ToString("hh:mm tt", CultureInfo.InvariantCulture)
            'Resultado =>  10:00 AM

    Ahora, si a mi variable hora1 (que tiene el valor 10:00:00) le quiero sumar 2 horas.

            TextBox1.Text = hora1.AddHours(2).ToString("hh:mm tt", CultureInfo.InvariantCulture)
            'Resultado =>  12:00 PM   (InvariantCulture)
            'Resultado =>  12:00 p.m. (Cultura Perú - CreateSpecificCulture("es-PE")))

    Pregunta 2 :

    No necesitas comparar las horas en ese formato, ya que como te menciono lo puedes hacer directamente desde el DateTime. Si tienes una hora en formato hh:mm tt , puedes usar el DateTime.TryParseExact

    Pero en este ejemplo no creo conveniente que lo necesites, solo guardarías en una variable DateTime y listo.

            Dim hora1 As DateTime = DateTime.MinValue.AddHours(1) '01:00
    
            Dim otraHora1 As DateTime = DateTime.MinValue.AddHours(10) '10:00
            Dim otraHora2 As DateTime = DateTime.MinValue.AddHours(12) '12:00
    
            If hora1 >= otraHora1 And
                    hora1 < otraHora2 Then
                MessageBox.Show("Hora cumplida")
            Else
                MessageBox.Show("Es otra hora : " & hora1.ToString("hh:mm tt", CultureInfo.InvariantCulture))
                'Resultado => Es otra hora : 01:00 AM
            End If

    Saludos.



    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 lunes, 16 de mayo de 2016 4:19
    lunes, 16 de mayo de 2016 1:10
  • Gracias, se entendió pefectamente, pero cómo sería esa misma condición, si quiero que hora1 sea la hora actual en lugar de una hora fija?

    Solo esa cosita. Hago esto: hora1= now

    Pero no me funciona, me parece que es porque now le asigna la hora y la fecha. Cómo le asigno la hora actual?

    hora1= ¿Qué pongo aquí para que hora1 contenga la hora actual de manera que la condición de abajo funcione? :

    If hora1 >= otraHora1 And hora1 < otraHora2 Then MessageBox.Show("Hora cumplida") Else MessageBox.Show("Es otra hora : " & hora1.ToString("hh:mm tt", CultureInfo.InvariantCulture)) 'Resultado => Es otra hora : 01:00 AM End If




    • Editado James-2016 lunes, 16 de mayo de 2016 3:32
    • Marcado como respuesta James-2016 lunes, 16 de mayo de 2016 4:19
    • Desmarcado como respuesta James-2016 lunes, 16 de mayo de 2016 4:19
    lunes, 16 de mayo de 2016 3:30
  • Hola,

    Puedes usar TimeSpan.

            Dim hora1 As TimeSpan = New TimeSpan(11, 0, 0) '11:00 am
    
            Dim otraHora1 As TimeSpan = DateTime.MinValue.AddHours(10).TimeOfDay '10:00 am
            Dim otraHora2 As TimeSpan = DateTime.MinValue.AddHours(12).TimeOfDay '12:00 pm
    
            If hora1.Hours >= otraHora1.Hours And
               hora1.Hours < otraHora2.Hours Then
                MessageBox.Show("Hora cumplida")
            Else
                MessageBox.Show("Es otra hora : " & hora1.Hours )
            End If

    Si ejecutas esto si te mostrará el mensaje "hora cumplida", ya que 11:00 am es > a 10 y menor a 12.

    Si quieres obtener el tiempo actual :

    Dim hora1 As TimeSpan = Now.TimeOfDay

    Saludos.




    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 lunes, 16 de mayo de 2016 4:19
    lunes, 16 de mayo de 2016 4:11
  • Gracias, esa era.
    lunes, 16 de mayo de 2016 4:19