Program to convert time in seconds to hh:mm:ss format

63,239

Solution 1

There is class in .NET called TimeSpan which makes your code easy and elegant.

Example:

dim iSecond as double = 0 'Total number of seconds
Dim iSpan As TimeSpan = TimeSpan.FromSeconds(iSecond)

lblHours.Text = iSpan.Hours.ToString.PadLeft(2, "0"c)
lblMinutes.Text = iSpan.Minutes.ToString.PadLeft(2, "0"c)
lblSeconds.Text = iSpan.Seconds.ToString.PadLeft(2, "0"c)

txtFormattedTime.Text = iSpan.Hours.ToString.PadLeft(2, "0"c) & ":" & _
                        iSpan.Minutes.ToString.PadLeft(2, "0"c) & ":" & _
                        iSpan.Seconds.ToString.PadLeft(2, "0"c)

Solution 2

Visual Basic has two division operators, / and \. The / operator produces a result that's of type Double. You calculate 31 / 60 = 0.51666... You next assign that result to an Integer, that requires rounding. Thus producing 1, not 0.

You want to use the \ operator, the integer division operator. It truncates the result.

Solution 3

I hope this code will be useful

Dim ts As TimeSpan = TimeSpan.FromSeconds(227) 'or --> Dim ts As New TimeSpan(0, 0, 0, 227, 0)

Dim mydate As DateTime = New DateTime(ts.Ticks)
MessageBox.Show(mydate.ToString(("HH:mm:ss")))

Solution 4

You are using integers to store your data but division gives you doubles. When converting it back to integers it gets rounded to the nearest round number. So 0.5 becomes 0 but 0.51 becomes 1.

Solution 5

Dim SecondsDifference as integer = 2500  
Dim hms = TimeSpan.FromSeconds(SecondsDifference)
Dim h = hms.Hours.ToString
Dim m = hms.Minutes.ToString
Dim s = hms.Seconds.ToString
MsgBox("Hour:" + h + " Min:" + m + " Sec:" + s)
Share:
63,239
Failed_Noob
Author by

Failed_Noob

Updated on April 20, 2020

Comments

  • Failed_Noob
    Failed_Noob about 4 years

    I am trying to make a simple program to convert time given in seconds to hh:mm:ss format. But for some particular input values it produces an incorrect time format. This is what I have tried:

    Public Class Form1
        Dim Hours, Minutes, Seconds As Integer
    
        Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click
            lblHours.Text = "00"
            lblMinutes.Text = "00"
            lblSeconds.Text = "00"
            txtTimeSeconds.Text = ""
            txtFormattedTime.Text = ""
        End Sub
    
        Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate1.Click
            Seconds = Integer.Parse(txtTimeSeconds.Text)
            Hours = Seconds / 3600
            Seconds = Seconds Mod 3600
            Minutes = Seconds / 60
            Seconds = Seconds Mod 60
    
            lblHours.Text = Hours.ToString.PadLeft(2, "0"c)
            lblMinutes.Text = Minutes.ToString.PadLeft(2, "0"c)
            lblSeconds.Text = Seconds.ToString.PadLeft(2, "0"c)
    
            txtFormattedTime.Text = Hours.ToString.PadLeft(2, "0"c) & ":" & Minutes.ToString.PadLeft(2, "0"c) & ":" & Seconds.ToString.PadLeft(2, "0"c)
        End Sub
    End Class
    

    It works when the input value is 30:

    Enter image description here

    It does not work when the input value is 31:

    Enter image description here

    What have I done wrong? How can I fix this problem?

  • Justus Romijn
    Justus Romijn almost 11 years
    Could you explain a bit more?
  • Justus Romijn
    Justus Romijn almost 11 years
    Seems to me that this is the real answer, describing exactly what goes wrong and presenting a solution to it. +1!