我正在尝试制作一个简单的程序,将以秒为单位的时间转换为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时,它不起作用:
我做错了什么?我该如何解决这个问题?
答案 0 :(得分: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)
答案 1 :(得分:8)
Visual Basic有两个除法运算符/
和\
。 /运算符产生的结果类型为Double。你计算31/60 = 0.51666 ...接下来你将结果分配给一个需要舍入的整数。因此产生1而不是0。
您想使用整数除法运算符\
运算符。它会截断结果。
答案 2 :(得分: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")))
答案 3 :(得分:3)
您使用整数来存储数据,但是除法可以为您提供双倍数据。将其转换回整数时,它会四舍五入到最接近的整数。因此0.5变为0但0.51变为1。
答案 4 :(得分:2)
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)
答案 5 :(得分:1)
对于 txtformattedtime.text = ... ,我认为“ispan.tostring”也可以。
答案 6 :(得分:1)
我知道这个问题已经有一段时间了,但我想我可能会分享我手头的问题。如果将秒数放在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。