none
Minuten in Stunden umrechen

    Question

  • Hallo,

    ich habe in meinem Programm eine TrackBar in der man die Zeit für einen Alarm einstellen kann.
    Spätestens nach 60 Minuten muss man dann aber rechnen.
    Gib es die Möglichkeit den Code

    Me

     

    .Text = "Beenden nach " & TrackBar1.Value  & " Minuten starten."

    Button1.Text =

    "Beenden nach " & TrackBar1.Value & " Minuten starten."

    so umzustellen, dass aus dem Wert TrackBar1.Value gleich die Stunden berechnet werden.
    Natürlich könnte ich einfach

    Me

     

    .Text = "Beenden nach " & TrackBar1.Value / 60  & " Stunden starten."

    Button1.Text =

    "Beenden nach " & TrackBar1.Value & " Stunden starten."

    Machen. Dann kämen aber Werte wie 1,50 .. heraus. Was ja 1 Sunde 30 Minuten wären.


    Liebe Grüße Stefan
    Saturday, August 22, 2009 5:12 PM

Answers

  • Halli Stefan,

    rechnen ist out. Leider. Aber Recht hast Du ;-)

    Hier die kürzeste Lösung ohne zu Rechnen:

    ' Voreinstellungen von TrackBar1, wenn minutengenau eingestellt werden soll:
    ' ----------------------------------------------------------------------
    ' TrackBar1.Value = 1 (als StartValue)
    ' TrackBar1.Minimum = 1 (als logischer Mindestwert)
    ' Trackbar1.Maximum = 360 (als maximale Zeitspanne für hier z.B. 6 x 60 Minuten = 6 Stunden)
    ' TrackBar1.TickFrequency = 60 (als TickFrequenz mit der minutengenau einegstellt werden kann)
    Private Sub TrackBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar1.ValueChanged
    
      Dim minutes As TimeSpan = New TimeSpan(0, 0, TrackBar1.Value, 0)
      Button1.Text = "Beenden nach " + CStr(minutes.Hours) + " Stunde/n und " + CStr(minutes.Minutes) + " Minute/n starten."
    
    End Sub

    Beste Grüße,
    M.
    Sunday, August 23, 2009 9:17 AM
  • Hallo M.,

    probiere mal
            Button1.Text = String.Format("Die Anwendung wird in {0:HH} Stunden und {0:mm} heruntergefahren", _
                    New DateTime().AddMinutes(TrackBar1.Value))
    
    Gruß Elmar
    Sunday, August 23, 2009 2:17 PM
  • Hi,

    hier eine Funktion als Lösung für Dein Problem:

    Private Function GetHoursAndMinutes(ByVal minutes As Integer) As String
    
      Dim result As String = ""
    
      Dim hours As Integer = 0
      Dim rest As Integer = 0
    
      If minutes <= 60 Then
    
        If minutes = 1 Then
          result = minutes.ToString + " Minute"
        Else
          result = minutes.ToString + " Minuten"
        End If
    
      Else
    
        Do Until minutes < 60
          hours += 1
          minutes -= 60
          If minutes = 60 Then
            Exit Do
          ElseIf minutes < 60 Then
            rest = minutes
            Exit Do
          End If
        Loop
    
        result = hours.ToString + " Stunden " + rest.ToString + " Minute/n "
    
      End If
    
      Return result
    
    End Function
    Beste Grüße,
    M.
    Sunday, August 23, 2009 6:15 AM
  • Hi,

    geht auch kürzer:

    Private Function GetHoursAndMinutes(ByVal minuteValue As Integer) As String
    
      Dim result As String = ""
    
      Dim inputSpan As TimeSpan = New TimeSpan(0, 0, minuteValue, 0)
      Dim stunden As Integer = inputSpan.Hours
      Dim minuten As Integer = inputSpan.Minutes
    
      result = CStr(stunden) + " Stunde/n und " + CStr(minuten) + " Minute/n"
    
      Return result
    
    End Function
    


    Beste Grüße,
    M.
    Sunday, August 23, 2009 7:33 AM

All replies

  • Hi,

    hier eine Funktion als Lösung für Dein Problem:

    Private Function GetHoursAndMinutes(ByVal minutes As Integer) As String
    
      Dim result As String = ""
    
      Dim hours As Integer = 0
      Dim rest As Integer = 0
    
      If minutes <= 60 Then
    
        If minutes = 1 Then
          result = minutes.ToString + " Minute"
        Else
          result = minutes.ToString + " Minuten"
        End If
    
      Else
    
        Do Until minutes < 60
          hours += 1
          minutes -= 60
          If minutes = 60 Then
            Exit Do
          ElseIf minutes < 60 Then
            rest = minutes
            Exit Do
          End If
        Loop
    
        result = hours.ToString + " Stunden " + rest.ToString + " Minute/n "
    
      End If
    
      Return result
    
    End Function
    Beste Grüße,
    M.
    Sunday, August 23, 2009 6:15 AM
  • Hi,

    geht auch kürzer:

    Private Function GetHoursAndMinutes(ByVal minuteValue As Integer) As String
    
      Dim result As String = ""
    
      Dim inputSpan As TimeSpan = New TimeSpan(0, 0, minuteValue, 0)
      Dim stunden As Integer = inputSpan.Hours
      Dim minuten As Integer = inputSpan.Minutes
    
      result = CStr(stunden) + " Stunde/n und " + CStr(minuten) + " Minute/n"
    
      Return result
    
    End Function
    


    Beste Grüße,
    M.
    Sunday, August 23, 2009 7:33 AM
  • Hallo Stefan,

    selbst rechnen ist out ;-) Das geht direkt DateTime:
            For minutes As Integer = 120 To 0 Step -1
                Console.WriteLine("Die Anwendung wird in {0:t} Stunden heruntergefahren", _
                    New DateTime().AddMinutes(minutes))
            Next
    siehe auch Formatzeichenfolgen für Datum und Uhrzeit

    Gruß Elmar
    Sunday, August 23, 2009 8:09 AM
  • Halli Stefan,

    rechnen ist out. Leider. Aber Recht hast Du ;-)

    Hier die kürzeste Lösung ohne zu Rechnen:

    ' Voreinstellungen von TrackBar1, wenn minutengenau eingestellt werden soll:
    ' ----------------------------------------------------------------------
    ' TrackBar1.Value = 1 (als StartValue)
    ' TrackBar1.Minimum = 1 (als logischer Mindestwert)
    ' Trackbar1.Maximum = 360 (als maximale Zeitspanne für hier z.B. 6 x 60 Minuten = 6 Stunden)
    ' TrackBar1.TickFrequency = 60 (als TickFrequenz mit der minutengenau einegstellt werden kann)
    Private Sub TrackBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar1.ValueChanged
    
      Dim minutes As TimeSpan = New TimeSpan(0, 0, TrackBar1.Value, 0)
      Button1.Text = "Beenden nach " + CStr(minutes.Hours) + " Stunde/n und " + CStr(minutes.Minutes) + " Minute/n starten."
    
    End Sub

    Beste Grüße,
    M.
    Sunday, August 23, 2009 9:17 AM
  • Hallo M.,

    selbstformatieren aber auch ;-))

    TimeSpan hat nunmal hier den Nachteil, das es keine erweiterte Formatierung bereitstellt
    weil es primär fürs Rechnen gedacht ist.

    Wenn Du Dir den geposteten Link zur Formatierung anschaust, wirst Du auch eine Lösung finden,
    die eine in Stunden und Minuten geteilte Anzeige via DateTime (und einem Parameter) ermöglicht.
    Tipp: Console.WriteLine kann man durch das allgemeinere String.Format ersetzen.

    Da man Formatierung immer wieder braucht, lohnt sich IMO die nähere Beschäftigung,
    unabhängig von dem isolierten Problem hier.

    Gruß Elmar
    Sunday, August 23, 2009 9:42 AM
  • Hallo Elmar,

    eine Frage habe ich dann aber jetzt:

    Wie würdest Du denn Deinen Code in TrackBar1_ValueChanged einbauen?

    Beste Grüße,
    M.
    Sunday, August 23, 2009 1:45 PM
  • Hallo M.,

    probiere mal
            Button1.Text = String.Format("Die Anwendung wird in {0:HH} Stunden und {0:mm} heruntergefahren", _
                    New DateTime().AddMinutes(TrackBar1.Value))
    
    Gruß Elmar
    Sunday, August 23, 2009 2:17 PM
  • Hallo Elmar,

    saubere Lösung. Ich fand meine letzte Lösung schon gut, aber was den Formatierungsaspekt angeht ist Deine klar besser.

    Beste Grüße,
    M.
    Sunday, August 23, 2009 7:00 PM
  • Hallo M.,

    programmieren ist immer auch ein bißchen Spielen mit den Möglichkeiten.

    Und deswegen fand ich vor allem gut, dass Du  Dich mit den diversen
    Wegen auseinandergesetzt hast, als Dich mit dem erstbesten Einfall
    zufrieden zu geben!

    Gruß Elmar
    Monday, August 24, 2009 7:01 AM
  • So eifach wie genial, oder auch einfach genial.
    Genial und einfach?
    Jedenfalls genau das, was ich brauche.
    Danke.
    Liebe Grüße Stefan
    Monday, August 24, 2009 5:56 PM