none
como puedo solucionar este problema amigos del foro

    Debate general

  • buenas tardes a todos  hace un tiempo Leandro me oriento sobre como restar horas y se lo agradezco mucho

    pero aun tengo un problema que no puedo solucionar

    bueno mi aplicasion en el fondo es para tomar los tiempo de detencion de un equipo durante un turno de 12 horas  y sumar el total de horas detenidas y me entrege las horas efectivas de operacion hasta aqui todo bien

    pero mi verdadero problema son los siguientes

    ejemplo: si tengo una parada del equipo a las 19:00  y el equipo se pone en funcionamiento a la 01:20 am  la resta que obtengo es -17.66

    como pueden ver es un resultado malo y no se como puedo solucionar esto amigosy por ultimo este otro problema

    que no puedo trabajar con la hora 24:00 justa porque me arroja un error

    La conversion de la cadena "24:00" en el tipo "Date"no es valida

    bueno les dejo el codigo espero que me orienten ya que tengo muchas ganas de terminar mi aplicasion  gracias amigos del foro

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Inicio1 As DateTime = MaskedTextBox1.Text
            Dim Final1 As DateTime = MaskedTextBox5.Text
            Dim Resul1 As TimeSpan = Final1.Subtract(Inicio1)
            TextBox1.Text = Resul1.TotalHours.ToString()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            MaskedTextBox1.Clear()
            MaskedTextBox5.Clear()
            TextBox1.Clear()
            MaskedTextBox1.Focus()
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim Inicio2 As DateTime = MaskedTextBox2.Text
            Dim Final2 As DateTime = MaskedTextBox6.Text
            Dim Resul2 As TimeSpan = Final2.Subtract(Inicio2)
            TextBox2.Text = Resul2.TotalHours.ToString()
        End Sub
        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            MaskedTextBox2.Clear()
            MaskedTextBox6.Clear()
            TextBox2.Clear()
            MaskedTextBox2.Focus()
        End Sub
    
        Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            Dim Inicio3 As DateTime = MaskedTextBox3.Text
            Dim Final3 As DateTime = MaskedTextBox7.Text
            Dim Resul3 As TimeSpan = Final3.Subtract(Inicio3)
            TextBox3.Text = Resul3.TotalHours.ToString()
        End Sub
    
        Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
            MaskedTextBox3.Clear()
            MaskedTextBox7.Clear()
            TextBox3.Clear()
            MaskedTextBox3.Focus()
        End Sub
        Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
            Dim Inicio4 As DateTime = MaskedTextBox4.Text
            Dim Final4 As DateTime = MaskedTextBox8.Text
            Dim Resul4 As TimeSpan = Final4.Subtract(Inicio4)
            TextBox4.Text = Resul4.TotalHours.ToString()
        End Sub
        Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
            MaskedTextBox4.Clear()
            MaskedTextBox8.Clear()
            TextBox4.Clear()
            MaskedTextBox4.Focus()
        End Sub
    
        Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
            If CheckBox1.Checked = True Then
                CheckBox2.Checked = False
                Button1.Visible = True
                Button2.Visible = True
                Label1.Visible = True
                Label5.Visible = True
                Label9.Visible = True
                MaskedTextBox1.Visible = True
                MaskedTextBox5.Visible = True
                TextBox1.Visible = True
            End If
        End Sub
    
        Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
            If CheckBox2.Checked = True Then
                CheckBox1.Checked = False
                Button1.Visible = False
                Button2.Visible = False
                Label1.Visible = False
                Label5.Visible = False
                Label9.Visible = False
                MaskedTextBox1.Visible = False
                MaskedTextBox5.Visible = False
                TextBox1.Visible = False
            End If
        End Sub
    
        Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
            If CheckBox3.Checked = True Then
                CheckBox4.Checked = False
                Button3.Visible = True
                Button4.Visible = True
                Label2.Visible = True
                Label6.Visible = True
                Label10.Visible = True
                MaskedTextBox2.Visible = True
                MaskedTextBox6.Visible = True
                TextBox2.Visible = True
            End If
        End Sub
    
        Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
            If CheckBox4.Checked = True Then
                CheckBox3.Checked = False
                Button3.Visible = False
                Button4.Visible = False
                Label2.Visible = False
                Label6.Visible = False
                Label10.Visible = False
                MaskedTextBox2.Visible = False
                MaskedTextBox6.Visible = False
                TextBox2.Visible = False
            End If
        End Sub
    
        Private Sub CheckBox5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox5.CheckedChanged
            If CheckBox5.Checked = True Then
                CheckBox6.Checked = False
                Button5.Visible = True
                Button6.Visible = True
                Label3.Visible = True
                Label7.Visible = True
                Label11.Visible = True
                MaskedTextBox3.Visible = True
                MaskedTextBox7.Visible = True
                TextBox3.Visible = True
            End If
        End Sub
    
        Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged
            If CheckBox6.Checked = True Then
                CheckBox5.Checked = False
                Button5.Visible = False
                Button6.Visible = False
                Label3.Visible = False
                Label7.Visible = False
                Label11.Visible = False
                MaskedTextBox3.Visible = False
                MaskedTextBox7.Visible = False
                TextBox3.Visible = False
            End If
        End Sub
    
        Private Sub CheckBox7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox7.CheckedChanged
            If CheckBox7.Checked = True Then
                CheckBox8.Checked = False
                Button7.Visible = True
                Button8.Visible = True
                Label4.Visible = True
                Label8.Visible = True
                Label12.Visible = True
                MaskedTextBox4.Visible = True
                MaskedTextBox8.Visible = True
                TextBox4.Visible = True
            End If
        End Sub
    
        Private Sub CheckBox8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox8.CheckedChanged
            If CheckBox8.Checked = True Then
                CheckBox7.Checked = False
                Button7.Visible = False
                Button8.Visible = False
                Label4.Visible = False
                Label8.Visible = False
                Label12.Visible = False
                MaskedTextBox4.Visible = False
                MaskedTextBox8.Visible = False
                TextBox4.Visible = False
            End If
        End Sub
    End Class
    


     

     

     

     

    viernes, 18 de noviembre de 2011 15:29

Todas las respuestas

  • hola

    que no puedo trabajar con la hora 24:00

    no has probado usar

    Dim fecha As DateTime = Convert.ToDateTime("24:00")

    esto

    Dim Inicio1 As DateTime = MaskedTextBox1.Text

    no es valido, porque no convirtes de tipo, si tuvieras definido el Option Strict en el codigo no te dejaria compilar

    usa

    Dim Inicio1 As DateTime = Convert.ToDateTime(MaskedTextBox1.Text)

     

     

    ademas otra tema, porque defines cada evento en cada check, porque no haces un codigo generico asociando todos los check, asi evitas tanto codigo

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 18 de noviembre de 2011 15:55
  • hola Leandro priemero que nada gracias por tu ayuda

    pero estos dos problemas que tengo ahora no me han dejado seguir adelante

    dime  Leandro como podria solucionar lo otro que cuando  tengo una hora de inicio de detencion alas 19:00 PM  y  la hora de puesta en marcha

    a las 01:20 AM  me arroja un total de horas de detenidas de  -17:66  que podria hacer en este caso

    y lo que me comentas Leandro dejame ver y luego te respondo gracias

     

    viernes, 18 de noviembre de 2011 16:10
  • el tema es que hacen referencia a dos dias distintos, alli te falta determinar que dias se tratan cada horario, sino lo definen veo dificil poder realizar el calculo

    porque en lugar de solo tener horas no guardas la fecha completa para poder realziar calculos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 18 de noviembre de 2011 16:18
  • hola Leandro priemero que nada gracias por tu ayuda

    pero estos dos problemas que tengo ahora no me han dejado seguir adelante

    dime  Leandro como podria solucionar lo otro que cuando  tengo una hora de inicio de detencion alas 19:00 PM  y  la hora de puesta en marcha

    a las 01:20 AM  me arroja un total de horas de detenidas de  -17:66  que podria hacer en este caso

    y lo que me comentas Leandro dejame ver y luego te respondo gracias

     

    a mi me parece más un problema de logica que de resta.

    plantiandolo de varios puntos de vista y resultado debe ser el mismo.

    asumanos que un empleado entro a trabajar a las 18:00 horas del día Lunes y Salio de trabajar a las 06:00 del día martes

    Dim fe As New DateTime(2011, 11, 14, 18, 0, 0)

    Dim fs As New DateTime(2011, 11, 15, 6, 0, 0)

    Dim tt As TimeSpan = fs - fe

    tt deberia de tener el tiempo que el empleado estubo trabajando desde su hora de entrada hasta su hora de salida.

    si yo coloca la fecha de salida de la siguiente manera.

    Dim fs As New DateTime(2011, 11, 14, 6, 0, 0)

    y efectuo la resta es logico que obtendre un valor negativo como en tu caso.

     

    asi que la logica es: si se detubo a las 19:00 horas del día Lunes no puede iniciar nuevamente a la 01:20 AM del mismo día poque obtendras un valor negativo, así que aqui la logica que deberas de implementar es si la hora de inicio de operación es menor a la hora que se detubo entonces tendras que incrementar un día para que el valor resultado de la resta no sea negativo.

    es más, la forma de capturar la hora que se detubo deberia de incluir el dia y la forma de capturar la hora que se restablecio la operación deberia de incluir la fecha ya que pudo haber estado fuera de operación por un día y medio y logico como asumo que solo estas capturando horas tendras problemas porque no obtendras el tiempo exacto que estubo fuera de operación.

    me doy a entender???

    Salu2,

     

     

     

     


    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor





    viernes, 18 de noviembre de 2011 16:26
  • hola Marvin E. gracias por tu interes en ayudarme

    la verdad e pensado mucho en esto y no logro encontrar una solucion

    pero tu me dices Marvin si trabajo ademas con fecha podria solucionar este problema

    viernes, 18 de noviembre de 2011 16:54
  • hola Marvin E. gracias por tu interes en ayudarme

    la verdad e pensado mucho en esto y no logro encontrar una solucion

    pero tu me dices Marvin si trabajo ademas con fecha podria solucionar este problema


    exactamente... como tambien lo menciona Leandro, creo que te vendrias a ahorrar muchos dolores de cabeza.

    Salu2,

     


    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor



    viernes, 18 de noviembre de 2011 17:05
  • claro que se soluciona si trabjas con el DateTime

    porque tendras la definicion del dia en que se produce el evento junto con la hora, las horas solas como tu las has puesto no representan el contexto

    solo funcionaria si las horas se dan en el mismo dia, entonces si haces

    Dim fecha1 As DateTime = Convert.ToDateTime("01:00 AM")

    Dim fecha2 As DateTime = Convert.ToDateTime("19:00 PM")

    y restas

    Dim result As TimeSpan = fecha2.Substract(fecha1)

    alli si funciona porque se supone que el dia es el mismo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 18 de noviembre de 2011 17:07
  • Leandro bueno mira si  utilizo el siguiente codigo
    me dara problema al establecer en la pestaña del MasketBox a hora  para solamente ingresar horas

    Dim Inicio1 As DateTime = Convert.ToDateTime(MaskedTextBox1.Text)

    viernes, 18 de noviembre de 2011 17:25
  • pero es una fecha valida la que defines ?

    recueda que si es formato de 24 hs va sin el AM/PM pero si no es formato 24hs debes incluirlo

    lo planteo por el formato que hayas definido en la mascara de MaskedTextBox

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 18 de noviembre de 2011 17:30
  • bueno ahora veo el error que estoy cometiendo

    pero como lo hago para empezar nuevamente  incluyendo las fechas amigos

    este es el codigo que estaba ocupando para los tiempo de inicio y termino y me entrega el tiempo detenido

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Inicio1 As DateTime = MaskedTextBox1.Text
            Dim Final1 As DateTime = MaskedTextBox5.Text
            Dim Resul1 As TimeSpan = Final1.Subtract(Inicio1)
            TextBox1.Text = Resul1.TotalHours.ToString()
        End Sub


    viernes, 18 de noviembre de 2011 17:34
  •  bueno ahora veo el error que estoy cometiendo

    pero como lo hago para empezar nuevamente  incluyendo las fechas amigos

    este es el codigo que estaba ocupando para los tiempo de inicio y termino y me entrega el tiempo detenido

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Inicio1 As DateTime = MaskedTextBox1.Text
            Dim Final1 As DateTime = MaskedTextBox5.Text
            Dim Resul1 As TimeSpan = Final1.Subtract(Inicio1)
            TextBox1.Text = Resul1.TotalHours.ToString()
        End Sub


     

    y porque no usas el control DateTimePicker? así podras editar mejor fecha con tiempo a la vez

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

      NetBarControl

      TextEditor



    viernes, 18 de noviembre de 2011 18:15
  • me voy a despejar un poco  mas  rato vuelvo amigos

    gracias

    viernes, 18 de noviembre de 2011 18:16
  • esto

     Dim Inicio1 As DateTime = MaskedTextBox1.Text

    sigue sin estar bien

    habilita el Option Strict y veras como te lo marca

    deberias usar

     Dim Inicio1 As DateTime = Convert.ToDateTime(MaskedTextBox1.Text)

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 18 de noviembre de 2011 18:18