Vb.net 将时间(秒)转换为hh:mm:ss格式的程序

Vb.net 将时间(秒)转换为hh:mm:ss格式的程序,vb.net,time-format,Vb.net,Time Format,我试图制作一个简单的程序,将以秒为单位的时间转换成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

我试图制作一个简单的程序,将以秒为单位的时间转换成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时,它工作:

当输入值为31时,它不工作:

我做错了什么?如何解决此问题?

Visual Basic有两个除法运算符,
/
\
。/运算符生成类型为Double的结果。你计算31/60=0.51666。。。接下来,将该结果指定给需要舍入的整数。因此产生1,而不是0


您需要使用
\
运算符,即整数除法运算符。它会截断结果。

您使用整数存储数据,但除法会提供双倍运算。当将其转换回整数时,它将四舍五入到最接近的整数。因此,0.5变为0,但0.51变为1。

在.NET中有一个名为

例如:

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)

对于txtformatedtime.text=…我认为“ispan.tostring”也可以使用。

我希望这段代码会有用

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

有关所用方法的更多信息,请访问。

您能再解释一下吗?在我看来,这才是真正的答案,准确地描述了问题所在并提出了解决方案+1.