none
asignarle un valor a una hora vb.net RRS feed

  • Pregunta

  • buenas tardes

    vb.net

    mysql

    amigos programadores si me puede orientar por favor gracias estoy tratando de hacer una  aplicación de un estacionamiento 

    entrada y salida de vehículos

    por ejemplo un auto llego 12:00 y salio 13:00 = 01:00  estuvo una hora el cobro seria $500 

    ¿si el vehículo estuvo ejemplo llego  12:00 y salio 12:15 = estuvo 15 minutos pero igual se le cobra los $500?

    otro ejemplo si el vehiculo llego 12:00 y salio 13:15 = estuvo 01:15  entoces cada 15 minutos depues de la hora deberia cobrarse $150 cada quince minutos después de la hora 

    este lo encontré en el foro para calcular las hora  codigo para  sumar las horas 

    ¿ pero como le asigno un valor monetario a una hora ?

     Dim fechaini As DateTime
            Dim fechafin As DateTime
    
            DateTime.TryParse(TextBox1.Text, fechaini) ' 12:00
            DateTime.TryParse(TextBox2.Text, fechafin) '13:00
           
    
            Dim dif As TimeSpan = fechafin - fechaini
    
            MsgBox("Han transcurridos " & dif.Hours & ":" & dif.Minutes & " hrs.")

     

    jueves, 4 de febrero de 2016 15:29

Respuestas

  • "djnilo" preguntó:

    > ¿ pero como le asigno un valor monetario a una hora ?

    Hola:

    Me imagino que lo que deseas es que te digamos los cálculos que tienes que hacer para obtener el precio total del aparcamiento. Si es así, mira a ver si te sirve la siguiente función, la cual la tendrás que adaptar a tus necesidades:

        Private Shared Function ObtenerPrecio(fechaIni As DateTime, fechaFin As DateTime) As Decimal
    
            Dim precioHora As Decimal = 500D
            Dim precioCuartoHora As Decimal = 150D
            Dim total As Decimal
    
            ' Obtener la diferencia horaria.
            Dim dif As TimeSpan = fechaFin - fechaIni
    
            ' Horas completas.
            Dim horas As Integer = dif.Hours
    
            ' Número de cuartos de hora.
            Dim cuartosHora As Integer = CInt((dif.TotalHours - horas) * 60) \ 15
    
            If (horas < 1) Then
                ' Si el precio es menor de una hora, parece ser que como mínimo
                ' se le cobra $500, aunque haya estado 1 minuto estacionado.
                total = precioHora
    
            Else
                ' Ha estado estacionado una hora o más.
                total = (horas * precioHora) + (cuartosHora * precioCuartoHora)
    
            End If
    
            Return total
    
        End Function

    Ahora, cuando desees obtener el precio total de un aparcamiento, llamarías a la función anterior pasándole las horas de inicio y final del aparcamiento:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim fechaini As DateTime = DateTime.Now()
            Dim fechafin1 As DateTime = fechaini.AddHours(1.5)  ' Hora y media
            Dim fechafin2 As DateTime = fechaini.AddHours(1.75) ' Hora y tres cuartos de hora
            Dim fechafin3 As DateTime = fechaini.AddHours(2.25) ' Dos horas y cuarto
    
            ' Obtenemos el precio formateado de tres aparcamientos.
            '
            Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1))   '$800,00
            Dim vehiculo2 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin2))   '$950,00
            Dim vehiculo3 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin3))   '$1.150,00
    
        End Sub

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    sábado, 6 de febrero de 2016 11:30
    Moderador
  • "djnilo" escribió:

    > mira trate de hacerlo correr me arrojar error en los
    > texto donde pongo la hora de salida
    >
    >  Dim fechafin1 As DateTime = fechaini.AddHours(TextBox1.Text) ' 12:00
    >  Dim fechafin2 As DateTime = fechaini.AddHours(TextBox2.Text) ' 13:15
    >  Dim fechafin3 As DateTime = fechaini.AddHours(TextBox3.Text) ' 14:45

    Si en los tres controles has escrito una supuesta "hora" (entre comillas) de salida ("12:00", "13:15", "14:45"), deberías de saber que esos valores NO SE PUEDEN CONVERTIR al tipo de dato Double, que es el tipo de dato que espera que se le pase el método AddHours de un objeto DateTime. En definitiva, NO PUEDES especificar una hora válida escribiendo en un control TextBox valores alfanuméricos como "12:00", "13:15" y "14:45".

    Tendrías que convertir dichos valores a DateTime mediante el método Convert.ToDateTime:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim fechaini As DateTime = DateTime.Now()
    
            Dim fechafin1 As DateTime = Convert.ToDateTime(TextBox1.Text)
            Dim fechafin2 As DateTime = Convert.ToDateTime(TextBox2.Text)
            Dim fechafin3 As DateTime = Convert.ToDateTime(TextBox3.Text)
    
    
            ' Obtenemos el precio de tres aparcamientos.
            '
            Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1))   '$500
            Dim vehiculo2 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin2))   '$500
            Dim vehiculo3 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin3))   '$500
    
        End Sub

    Pero haciendo eso, lo más seguro es que no obtengas un valor correcto, porque si solamente anotas la hora en los distintos controles TextBox, como fecha te tomará la del día en la que estás ejecutando el código. Es decir, si a las 18:30 horas de esta tarde ejecutas ese código, y en los tres controles TextBox escribes "12:00", "13:15" y "14:45", los valores de las tres variables DateTime serán los siguientes:

       Dim fechaini As DateTime = DateTime.Now()   ' #2/9/2016 6:30:00 PM#

       fechafin1 ==>  #2/9/2016 12:00:00 PM#
       fechafin2 ==>  #2/9/2016 01:15:00 PM#
       fechafin3 ==>  #2/9/2016 02:45:00 PM#

    Es decir, que los vehículos habrán salido ANTES de entrar, ya que la diferencia horaria será negativa, de ahí que los valores obtenidos para los tres vehículos sea de $500,00, aunque hayan estado 28 días estacionados en el aparcamiento. :-))

    A la función ObtenerPrecio le tienes que pasar dos valores de fecha y hora (DateTime) válidos: el primero que indica la fecha y hora de ENTRADA y el segundo la fecha y hora de SALIDA. Todo lo que no sea hacer eso son ganas, nunca mejor dicho, de perder el tiempo.

    Tienes que verificar que la fecha y hora de salida SIEMPRE ES MAYOR que la fecha y hora de entrada. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    martes, 9 de febrero de 2016 15:25
    Moderador

Todas las respuestas

  • "djnilo" preguntó:

    > ¿ pero como le asigno un valor monetario a una hora ?

    Hola:

    Me imagino que lo que deseas es que te digamos los cálculos que tienes que hacer para obtener el precio total del aparcamiento. Si es así, mira a ver si te sirve la siguiente función, la cual la tendrás que adaptar a tus necesidades:

        Private Shared Function ObtenerPrecio(fechaIni As DateTime, fechaFin As DateTime) As Decimal
    
            Dim precioHora As Decimal = 500D
            Dim precioCuartoHora As Decimal = 150D
            Dim total As Decimal
    
            ' Obtener la diferencia horaria.
            Dim dif As TimeSpan = fechaFin - fechaIni
    
            ' Horas completas.
            Dim horas As Integer = dif.Hours
    
            ' Número de cuartos de hora.
            Dim cuartosHora As Integer = CInt((dif.TotalHours - horas) * 60) \ 15
    
            If (horas < 1) Then
                ' Si el precio es menor de una hora, parece ser que como mínimo
                ' se le cobra $500, aunque haya estado 1 minuto estacionado.
                total = precioHora
    
            Else
                ' Ha estado estacionado una hora o más.
                total = (horas * precioHora) + (cuartosHora * precioCuartoHora)
    
            End If
    
            Return total
    
        End Function

    Ahora, cuando desees obtener el precio total de un aparcamiento, llamarías a la función anterior pasándole las horas de inicio y final del aparcamiento:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim fechaini As DateTime = DateTime.Now()
            Dim fechafin1 As DateTime = fechaini.AddHours(1.5)  ' Hora y media
            Dim fechafin2 As DateTime = fechaini.AddHours(1.75) ' Hora y tres cuartos de hora
            Dim fechafin3 As DateTime = fechaini.AddHours(2.25) ' Dos horas y cuarto
    
            ' Obtenemos el precio formateado de tres aparcamientos.
            '
            Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1))   '$800,00
            Dim vehiculo2 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin2))   '$950,00
            Dim vehiculo3 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin3))   '$1.150,00
    
        End Sub

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    sábado, 6 de febrero de 2016 11:30
    Moderador
  • muchas gracias por responder Enrique M. Montejo

    soy novato 

    no entiendo esta parte como muestro el resultado

    Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1))   '$800,00
            Dim vehiculo2 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin2))   '$950,00
            Dim vehiculo3 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin3))   '$1.150,00

    lunes, 8 de febrero de 2016 21:50
  • Hola djnilo.

    Pues es valor final está reflejado en las variable al inicio de la instrucción. Osea que podrias asignarle esa variable a por ejemplo el texto de un label.

    Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1)) '$800,00

    label1.text = vehiculo1 'Texto: $800,00

    Salu2.


    Atte. Pablo. [VB.Net - Visual Studio 2015] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    lunes, 8 de febrero de 2016 22:03
  • gracias por responder Pablo Computer

    mira trate de hacerlo correr me arrojar error en los texto donde pongo la hora de salida

     Dim fechaini As DateTime = DateTime.Now()
    
    
            Dim fechafin1 As DateTime = fechaini.AddHours(TextBox1.Text)  '12:00
            Dim fechafin2 As DateTime = fechaini.AddHours(TextBox2.Text) ' 13:15
            Dim fechafin3 As DateTime = fechaini.AddHours(TextBox3.Text) ' 14:45
    
            
           
            ' Obtenemos el precio formateado de tres aparcamientos.
            '
            Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1))   '
            Dim vehiculo2 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin2))   '
            Dim vehiculo3 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin3))   '
    
            Label5.Text = vehiculo1
            Label6.Text = vehiculo2
            Label7.Text = vehiculo3


    • Editado djnilo martes, 9 de febrero de 2016 13:08
    martes, 9 de febrero de 2016 13:07
  • "djnilo" escribió:

    > mira trate de hacerlo correr me arrojar error en los
    > texto donde pongo la hora de salida
    >
    >  Dim fechafin1 As DateTime = fechaini.AddHours(TextBox1.Text) ' 12:00
    >  Dim fechafin2 As DateTime = fechaini.AddHours(TextBox2.Text) ' 13:15
    >  Dim fechafin3 As DateTime = fechaini.AddHours(TextBox3.Text) ' 14:45

    Si en los tres controles has escrito una supuesta "hora" (entre comillas) de salida ("12:00", "13:15", "14:45"), deberías de saber que esos valores NO SE PUEDEN CONVERTIR al tipo de dato Double, que es el tipo de dato que espera que se le pase el método AddHours de un objeto DateTime. En definitiva, NO PUEDES especificar una hora válida escribiendo en un control TextBox valores alfanuméricos como "12:00", "13:15" y "14:45".

    Tendrías que convertir dichos valores a DateTime mediante el método Convert.ToDateTime:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim fechaini As DateTime = DateTime.Now()
    
            Dim fechafin1 As DateTime = Convert.ToDateTime(TextBox1.Text)
            Dim fechafin2 As DateTime = Convert.ToDateTime(TextBox2.Text)
            Dim fechafin3 As DateTime = Convert.ToDateTime(TextBox3.Text)
    
    
            ' Obtenemos el precio de tres aparcamientos.
            '
            Dim vehiculo1 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin1))   '$500
            Dim vehiculo2 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin2))   '$500
            Dim vehiculo3 As String = String.Format("{0:C2}", ObtenerPrecio(fechaini, fechafin3))   '$500
    
        End Sub

    Pero haciendo eso, lo más seguro es que no obtengas un valor correcto, porque si solamente anotas la hora en los distintos controles TextBox, como fecha te tomará la del día en la que estás ejecutando el código. Es decir, si a las 18:30 horas de esta tarde ejecutas ese código, y en los tres controles TextBox escribes "12:00", "13:15" y "14:45", los valores de las tres variables DateTime serán los siguientes:

       Dim fechaini As DateTime = DateTime.Now()   ' #2/9/2016 6:30:00 PM#

       fechafin1 ==>  #2/9/2016 12:00:00 PM#
       fechafin2 ==>  #2/9/2016 01:15:00 PM#
       fechafin3 ==>  #2/9/2016 02:45:00 PM#

    Es decir, que los vehículos habrán salido ANTES de entrar, ya que la diferencia horaria será negativa, de ahí que los valores obtenidos para los tres vehículos sea de $500,00, aunque hayan estado 28 días estacionados en el aparcamiento. :-))

    A la función ObtenerPrecio le tienes que pasar dos valores de fecha y hora (DateTime) válidos: el primero que indica la fecha y hora de ENTRADA y el segundo la fecha y hora de SALIDA. Todo lo que no sea hacer eso son ganas, nunca mejor dicho, de perder el tiempo.

    Tienes que verificar que la fecha y hora de salida SIEMPRE ES MAYOR que la fecha y hora de entrada. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    martes, 9 de febrero de 2016 15:25
    Moderador