2012-01-15 328 views
14

我想製作一個簡單的程序,將時間轉換爲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

我做錯了什麼?我該如何解決這個問題?

回答

15

.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

8

Visual Basic有兩個分部運營商/\。 /運算符產生一個Double類型的結果。您計算31/60 = 0.51666 ...您接下來將該結果分配給整數,這需要四捨五入。因此產生1,而不是0.

你想使用\運算符,整數除法運算符。它截斷結果。

+1

在我看來,這是真正的答案,準確地描述出了什麼問題並提出解決方案。 +1! – 2013-05-22 10:25:05

3

您正在使用整數來存儲您的數據,但部門給你雙打。將其轉換回整數時,它會四捨五入到最近的整數。因此,0.5變爲0,但0.51變爲1.

1

對於txtformattedtime.text = ...我覺得「ispan.tostring」將正常工作。

+0

你能解釋一下嗎? – 2013-05-22 10:23:18

1
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

我希望這個代碼將是有益的

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

對於所使用的方法的更多信息Visit here

相關問題