none
Cálculo númérico en VB.NET a C# RRS feed

  • Pregunta

  • Tengo función legacy VB.NET

     Public Shared Function TimerTrabajoTotal(ByVal I As Long) As String
    
            Dim Time = Format(Int(I / 36000) Mod 24, "00") & ":" &
                     Format(Int(I / 600) Mod 60, "00") & ":" &
                     Format(Int(I / 10) Mod 60, "00") '& ":" & _
            'Format(I Mod 10, "00")
            Return Time
        End Function


    Intento pasarlo a C#:

        
     var valor1 = (I_Time / (double)36000) % 24;
                var valor2 = (I_Time / (double)600) % 60;
                var valor3 = (I_Time / (double)10) % 60;
             
                var Time = Microsoft.VisualBasic.Strings.Format(valor1, "00") + ":"
                    + Microsoft.VisualBasic.Strings.Format(valor2, "00") + ":"
                    + Microsoft.VisualBasic.Strings.Format(valor3, "00")
                    ;
               var time2 = General.TimerTrabajoTotal(I_Time);
    
                Assert.AreEqual(Time, time2);



    No obtengo los mismos valores llamando a la función VB.NET que en C#

    jueves, 8 de agosto de 2019 7:30

Todas las respuestas

  • hola

    de donde sale "I_Time" ? es el parametro "I" en el codigo vb

    No se aplica el VisualBasic.String.Format(), c# ya tiene esa funcionalidad

    string Time = string.Format("{0:00}:{1:00}:{2:00}", valor1, valor2, valor3);

    En tu codigo c# deberias quitar la referencia a Microsoft.VisualBasic

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 8 de agosto de 2019 13:20
  • se utiliza un “cronómetro”, el código similar a este ejemplo:

     https://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/409-ejemplo-de-cronometro.htm

      I = 0 'Inicializar el contador.  
    2.            Timer1.Interval = 0    'Detener el cronometro  
    3.            lblCronometro.Caption = ""  'Limpiar la etiqueta  
    4.            Timer1.Interval = 1    'Iniciar el cronometro  
     
    1.        Private Sub Timer1_Timer()  
    2.            I = I + 1  
    3.            Tiempo = Format(Int(I / 36000) Mod 24, "00") & ":" & _  
    4.                     Format(Int(I / 600) Mod 60, "00") & ":" & _  
    5.                     Format(Int(I / 10) Mod 60, "00") & ":" & _  
    6.                     Format(I Mod 10, "00")  
    7.            lblCronometro.Caption = Tiempo  
    8.        End Sub  



    Se configura el Interval a 100

    Private Sub EnabledTimers()
            StopTimerWork()
            LabelTimer.Text = "00:00:00"
            Timer1.Interval = 100
            Timer1.Start()
            Timer2.Interval = 1000
            Timer2.Start()
        End Sub
     
        Private Sub EnabledTimerWork()
            Timer3.Interval = 100
            Timer3.Start()
            Timer4.Interval = 100
            Timer4.Start()
        End Sub

    Parece que se ajusta el contador ( Mod 12, Mo 2500):

    Private Sub Timer4_Tick(sender As System.Object, e As System.EventArgs) Handles Timer4.Tick
            I = I + 1
            If I Mod 12 = 0 Then
                I += 1
            End If
            If I Mod 2500 = 0 Then
                I += 1
            End If
            Time = Format(Int(I / 36000) Mod 24, "00") & ":" &
                     Format(Int(I / 600) Mod 60, "00") & ":" &
                     Format(Int(I / 10) Mod 60, "00") '& ":" & _
            TWorkTotal.Text = Time
     
        End Sub

    En c#

    public string ConvierteTiempo2(double tiempo)
            {
     
                var TempHoras = (Convert.ToInt32(tiempo) / 36000) % 24;
                var TempMin = (Convert.ToInt32(tiempo) / 600) % 60;
                var TempSeg = (Convert.ToInt32(tiempo) / 10) % 60;
     
                string horas, minutos, segundos;
                horas = TempHoras <= 9 ? "0" + TempHoras.ToString() : TempHoras.ToString();
                minutos = TempMin <= 9 ? "0" + TempMin.ToString() : TempMin.ToString();
                segundos = TempSeg <= 9 ? "0" + TempSeg.ToString() : TempSeg.ToString();
                return horas + ":" + minutos + ":" + segundos;
            }


    No entiendo bien la parte de:

     If I Mod 12 = 0 Then
                I += 1
            End If
            If I Mod 2500 = 0 Then
                I += 1
            End If


    miércoles, 14 de agosto de 2019 8:07