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

Fai*_*oob 16 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
        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
Run Code Online (Sandbox Code Playgroud)

它在输入值为30时有效:

在此输入图像描述

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

在此输入图像描述

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

Joh*_*Woo 19

.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)
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 8

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

您想使用\运算符,整数除法运算符.它会截断结果.

  • 在我看来,这是真正的答案,准确描述出了什么问题并提出了解决方案。+1! (2认同)

Jot*_*rdo 5

我希望这段代码有用

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")))
Run Code Online (Sandbox Code Playgroud)