Program to convert time in seconds to hh:mm:ss format
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)
Comments
-
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:
It does not work when the input value is 31:
What have I done wrong? How can I fix this problem?
-
Justus Romijn almost 11 yearsCould you explain a bit more?
-
Justus Romijn almost 11 yearsSeems to me that this is the real answer, describing exactly what goes wrong and presenting a solution to it. +1!