【问题标题】:Program to convert time in seconds to hh:mm:ss format以秒为单位将时间转换为 hh:mm:ss 格式的程序
【发布时间】:2012-02-10 17:57:19
【问题描述】:

我正在尝试制作一个简单的程序,以秒为单位将时间转换为 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时不起作用:

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

【问题讨论】:

    标签: vb.net time-format


    【解决方案1】:

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

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

    【讨论】:

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

    您正在使用整数来存储数据,但除法会给您双倍。将其转换回整数时,它会四舍五入到最接近的整数。所以 0.5 变成 0 但 0.51 变成 1。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        对于 txtformattedtime.text=... 我认为 "ispan.tostring" 也可以。

        【讨论】:

        • 你能再解释一下吗?
        【解决方案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)
        

        【讨论】:

          【解决方案6】:

          希望这段代码有用

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

          【讨论】:

            【解决方案7】:

            我知道这个问题已经回答了一段时间,但我想我可能会分享我对手头问题的解决方案。如果将秒数放在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
            

            访问here,了解所用方法的更多信息。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-11-29
              • 2011-06-17
              • 2011-04-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多