程序将时间以秒为单位转换为hh:mm:ss格式

问题描述:

我想制作一个简单的程序,将时间转换为hh:mm:ss格式。但对于某些特定的输入值,它会产生不正确的时间格式。这是我曾尝试:程序将时间以秒为单位转换为hh:mm:ss格式

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 

它的工作原理,当输入值为30:

Enter image description here

当输入值是31它不工作:

Enter image description here

我做错了什么?我该如何解决这个问题?

.NET中有一个名为TimeSpan的类,它使您的代码轻松优雅。

例子:

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) 
+0

它的工作原理。谢谢 – 2012-01-15 11:00:57

Visual Basic有两个分部运营商/\。 /运算符产生一个Double类型的结果。您计算31/60 = 0.51666 ...您接下来将该结果分配给整数,这需要四舍五入。因此产生1,而不是0.

你想使用\运算符,整数除法运算符。它截断结果。

+1

在我看来,这是真正的答案,准确地描述出了什么问题并提出解决方案。 +1! – 2013-05-22 10:25:05

您正在使用整数来存储您的数据,但部门给你双打。将其转换回整数时,它会四舍五入到最近的整数。因此,0.5变为0,但0.51变为1.

对于txtformattedtime.text = ...我觉得“ispan.tostring”将正常工作。

+0

你能解释一下吗? – 2013-05-22 10:23:18

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) 

我希望这个代码将是有益的

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"))) 

我知道这一个已经回答了有一段时间了,但我想我会分享我的解决手头的问题。如果将秒数置于TimeSpan对象中,则可以使用TimeSpan.toString()方法直接提取天数,小时数,分钟数,秒数甚至小数秒数。使用相同的表单和对象名称,我使用下面的代码来实现所需的结果。

Public Class Form1 
Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click 
    lblHours.Text = "00" 
    lblMinutes.Text = "00" 
    lblSeconds.Text = "00" 
    txtTimeSeconds.Text = "" 
    txtFormattedTime.Text = "" 
End Sub 
Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click 
    Dim tsSeconds = TimeSpan.FromSeconds(Convert.ToDouble(txtTimeSeconds.Text)) 
    lblHours.Text = tsSeconds.ToString("hh") 
    lblMinutes.Text = tsSeconds.ToString("mm") 
    lblSeconds.Text = tsSeconds.ToString("ss") 
    txtFormattedTime.Text = tsSeconds.ToString("hh\:mm\:ss") 
End Sub 
End Class 

对于所使用的方法的更多信息Visit here