2012-01-15 15 views
14

मैं सेकंड में दिए गए समय को एचएच: मिमी: एसएस प्रारूप में परिवर्तित करने के लिए एक सरल प्रोग्राम बनाने की कोशिश कर रहा हूं। लेकिन कुछ विशेष इनपुट मानों के लिए यह गलत समय प्रारूप उत्पन्न करता है। यह मैं क्या करने की कोशिश की है:प्रोग्राम सेकेंड में सेकंड में कनवर्ट करने के लिए प्रोग्राम: मिमी: एसएस प्रारूप

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

यह काम करता है। धन्यवाद –

8

विजुअल बेसिक में दो डिवीजन ऑपरेटर, / और \ है।/ऑपरेटर एक परिणाम उत्पन्न करता है जो कि डबल प्रकार का होता है। आप 31/60 = 0.51666 की गणना करते हैं ... आप अगली बार एक इंटीजर को परिणाम देते हैं, जिसके लिए गोल करने की आवश्यकता होती है। इस प्रकार 1 उत्पादन, 0.

आप \ ऑपरेटर, पूर्णांक विभाजन ऑपरेटर का उपयोग करना चाहते हैं। यह परिणाम छीनता है।

+1

मुझे लगता है कि यह वास्तविक जवाब है, यह बताता है कि वास्तव में क्या गलत है और इसका समाधान प्रस्तुत करना है। +1! –

3

आप अपने डेटा को स्टोर करने के लिए पूर्णांक का उपयोग कर रहे हैं लेकिन विभाजन आपको युगल देता है। इसे वापस पूर्णांक में परिवर्तित करते समय यह निकटतम दौर संख्या में गोल हो जाता है। तो 0.5 0 हो जाता है लेकिन 0.51 बन जाता है 1.

1

txtformattedtime.text के लिए = ... मुझे लगता है कि "ispan.tostring" रूप में अच्छी तरह काम करेगा।

+0

क्या आप थोड़ा और समझा सकते हैं? –

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() विधि का उपयोग करके दिन, घंटे, मिनट, सेकंड और यहां तक ​​कि fractional सेकंड को आसानी से निकाल सकते हैं। एक समान रूप और ऑब्जेक्ट नामों का उपयोग करके, मैंने वांछित परिणाम प्राप्त करने के लिए निम्न कोड का उपयोग किया।

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

संबंधित मुद्दे