Zeit Format mehr als 24 Stunden anzeigen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zeit Format mehr als 24 Stunden anzeigen

    Hallo,
    ich berechne wie im Quellcode ersichtlich die verbleibende Restzeit. Diese wird mir auch richtig angezeigt. Leider aber nur, solange diese Zeit nicht länger als 24h ist. Alles darünber beginnt dann wieder bei 0. Also bei 27 Stunden Gesamtrestzeit stehen dann nur 02:00 h da.
    Gibt es eine Möglichkeit, diese Zeit auch als "27:00 h" darzustellen?

    VB.NET-Quellcode

    1. 'zuerst verbleibende Meter verrechnen
    2. Restmeter = CInt(Auflage - Gutmeter)
    3. 'dann durch den gegenwärtigen Speed berechnen und bei Stillstand anzeige ausblenden
    4. Restdauer = CInt(Restmeter / Speed)
    5. Restdauerstunden = CInt((Restdauer / 60))
    6. 'Ausgabe im entsprechenden Label und falls Speed < 0 Anzeige ausblenden
    7. Controls("grp_ma" & ma_nummer).Controls("lbl_restzeit" & ma_nummer).Text = _
    8. String.Format("{0:HH}:{0:mm}", New DateTime().AddMinutes(Restdauer))
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    verbleibende Restzeit
    ist kein DateTime, sondern ein TimeSpan.
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Dim start = New DateTime(2015, 1, 1)
    2. Dim ende = DateTime.Now
    3. Dim total = (ende - start).TotalHours
    4. Dim hh = CInt(total)
    5. Dim mm = CInt((total - hh) * 60)
    6. Label1.Text = total.ToString
    7. Label2.Text = hh.ToString
    8. Label3.Text = mm.ToString
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, das ist schon mal hilfreich.
    Als Startzeit zur Berechnung nehme ich jedesmal "now", das ist klar. Aber aus meiner Berechnung wieviel Minuten die Maschine noch benötigt erhalte ich ja nur einen Integer Wert der die Minuten enthält. Wie rechne ich das nun gegeneinander auf?
    Ich habe also:
    now = jetzige Zeit
    Restdauer = Minuten als INT Wert
    Und ich müsste rechnen "von jetzt + die Minuten = eine Spanne von Stunden:Minuten" Da haperts aber bei mir an den jeweiligen Formatierungsstrings.

    Danke für jeden Denkanstoß!
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    Ich habe also
    dies:

    VB.NET-Quellcode

    1. Dim span As TimeSpan = TimeSpan.FromMinutes(1234)
    2. Label1.Text = span.ToString
    3. Label2.Text = span.Hours.ToString
    4. Label3.Text = span.Minutes.ToString
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Axxxxxl
    Aber aus meiner Berechnung wieviel Minuten die Maschine noch benötigt erhalte ich ja nur einen Integer Wert der die Minuten enthält. Wie rechne ich das nun gegeneinander auf?

    VB.NET-Quellcode

    1. Dim Startzeit = DateTime.Now
    2. Dim Restminuten = 1034
    3. Dim Endzeit = Startzeit.AddMinutes(Restminuten)
    4. Console.WriteLine("{0} + {1} = {2}", Startzeit, Restminuten, Endezeit)

    Aber wie oben schon geschrieben - schaue dir die Struktur Timespan und DateTime in MSDN genau an (da gibt es auch Beispiele zur Veranschaulichung)...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Also ich habe es nun so:

    VB.NET-Quellcode

    1. Dim restdauer As Integer = CInt(Restmeter / Speed)
    2. Dim start = DateTime.Now
    3. Dim ende = CStr(start) + CStr(restdauer)
    4. Dim Endzeit = start.AddMinutes(restdauer)
    5. Controls("grp_ma" & ma_nummer).Controls("lbl_restzeit" & ma_nummer).Text = CStr(Endzeit)


    Das funktioniert auch. Nur das er eben jetzt anzeigt, an welchem Tag und zu welcher Uhrzeit er fertig sein wird. Die Mitarnbeiter hätten aber dort gern stehen "Noch 27 h und 34 min". Geht das auch noch irgendwie?
    Wenn ich

    VB.NET-Quellcode

    1. DIm Restzeit = Endzeit - start
    mache, meckert er rum?!
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    VB.NET-Quellcode

    1. DIm Restzeit = Endzeit - start
    ist doch genau dasselbe wie

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Dim span As TimeSpan = TimeSpan.FromMinutes(1234)
    wenn Du span in Restzeit umbenennst und statt 1234 => restdauer einträgst.
    -------------------
    dies läuft:

    VB.NET-Quellcode

    1. Dim restdauer As Integer = 17
    2. Dim start = DateTime.Now
    3. Dim Endzeit = start.AddMinutes(restdauer)
    4. Dim Restzeit = Endzeit - start
    Bilder
    • Dauer.jpg

      10,21 kB, 339×95, 124 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, nun hab ich es soweit, dass er mir das anzeigt als String mit

    VB.NET-Quellcode

    1. Controls("grp_ma" & ma_nummer).Controls("lbl_restzeit" & ma_nummer).Text = Restzeit.ToString()

    Aber ich würde nun gern diesen Wert als Tag(e):Stunden:Minuten haben, was er mit dem Code oben nicht macht. Gebe ich

    VB.NET-Quellcode

    1. Controls("grp_ma" & ma_nummer).Controls("lbl_restzeit" & ma_nummer).Text = Restzeit.ToString("d:hh:mm")
    ein, kommt "Unwandlungsfehler"

    ==> seid .net zueinander :D <3 <==

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Axxxxxl“ ()

    So läuft es jetzt:

    VB.NET-Quellcode

    1. Controls("grp_ma" & ma_nummer).Controls("lbl_restzeit" & ma_nummer).Text = _
    2. Resttotal.ToString("d\d\:h\h\:m\m", System.Globalization.CultureInfo.InvariantCulture)


    DANKE an alle und schönes Wochenende !!!!
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    VB.NET-Quellcode

    1. Controls("grp_ma" & ma_nummer).Controls("lbl_restzeit" & ma_nummer).Text = Restzeit.ToString()
    Ein Label über seinen Namen und den Namen des Containers anzusprechen ist ein NoGo. Was passiert, wenn jemand Deine Controls umbenennt?
    Trenne Daten und GUI.
    Halte die Daten in einer Tabelle bereit und sende ein Update-Event an die Controls, dass sie sich die Daten zur Darstellung holen und anzeigen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!