Einer Stopwatch Zeit addieren

  • C#
  • .NET (FX) 4.5–4.8

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

    Einer Stopwatch Zeit addieren

    Moinsen

    ich habe in einer DGV-Spalte Arbeitszeiten gespeichert, die mit einer Stopwatch aufgenommen wurden.

    C#-Quellcode

    1. for (int i = 0; i <= _indexGesamtzahlMItarbeiter - 1; i++)
    2. {
    3. tabelle2.Rows[i].Cells[4].Value = _listeStopwatch[i].Elapsed ;
    4. }


    Nun soll vor dem nächsten

    _listeStopwatch[_indexaktuellerMItarbeiter - 1].Start();

    der Stopwatch die Zeit addiert werden, die zuvor in der DGV gespeichert wurde. Das gestaltet sich leider schwer, weil die Stopwatch immer von 0 anfängt. Außerdem hat die SW dieses formant mit hh:mm:ss.0000000 -> die nullen stehen für zehntausendstel sekunden oder so.

    Kann man das noch hinbiegen oder muss ma da auf datetime umändern?

    Habe nur eine Möglichkeit gefunden über Timespan, aber da stehen sich wieder die Formate im Wege.

    sw.Elapsed - TimeSpan.FromSeconds(3);
    Wenn Du die ermittelte Zeit im DGV hast, kannst Du doch die nächste Stopwatch-Zeit da einfach hinzuaddieren. Wo ist das Problem? Ok, von .Elapsed sollte man vielleicht die TotalSeconds nehmen, bevor man den Wert irgendwohin verfrachtet. Denn mit TimeSpans zu rechnen ist etwas komplizierter als mit Sekunden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @Visual_Prog Soll die Stopwatch von der letzten Zeit aus weiterzählen?
    Dann nutze .Start() und .Stop().
    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!
    @all
    ja mit .Start() und .Stop() addiert sich tatsächlich die Zeit von selber.

    Aber ich war etwas ungenau, das meinte ich nicht.

    EIner gespeicherten Zeit einer vorherigen Sitzung soll bei einer Neuausführung des Programms die Zeit addiert werden. Und das geht es leider nicht mit .Start() und .Stop() .

    Habe aber jetzt eine Lösung gefunden mit Hilfe vom Timespan.

    - eine gespeicherte Zeit einer Stopwatch kann man in einer Timespan konvertieren: _listeMitarbeiter[_indexaktuellerMitarbeiter-1].Bishergearbeitet = TimeSpan.Parse(tabelle2.Rows[_indexaktuellerMitarbeiter -1].Cells[4].Value.ToString());

    - Dann kann man einfach die Zeit der ermittelten Timespan mit einer neu aufgenommenen Zeit addieren, was in diesem Fall zu einer GesamtTimespan von Monatsstunden führt:

    _listeMitarbeiter[_indexaktuellerMitarbeiter - 1].Monatsstunden = _listeMitarbeiter[_indexaktuellerMitarbeiter - 1].Bishergearbeitet + _listeStopwatch[_indexaktuellerMitarbeiter-1].Elapsed;

    ich danke euch. Gruß
    OMG! Stopwatch.Elapsed ist bereits vom Typ TimeSpan. Wenn Du das mit DeinDGV.IrgendeineZelle = Stopwatch.Elapsed reinschreibst, ist in der Zelle ein Objekt vom Typ TimeSpan gespeichert. Da muss dann beim Addieren nix mehr in String und dann wieder zurück in TimeSpan geparst werden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed bei mir kann der Wert der DGV Irgendwie nicht zugewiesen werden, solange ich nicht TimeSpan.Parse() benutze.
    Aber es funktioniert jetzt zum Glück.

    Weiß Jemand was bei einer Timespan passiert, wenn sie den Wert von 99h:59min:59sek überschreitet?

    Denn geplant sind Zeitaufnahmen von über 99h, sollen ja Arbeitszeiten erfasst werden.
    1. Doku lesen
    2. ausprobieren
    geht alles schneller als eine Frage zu posten.
    Der Maximalwert liegt bei über 10675199 Stunden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Visual_Prog schrieb:

    Aber ich war etwas ungenau, das meinte ich nicht.
    Dann hast Du Dein Problem nicht genau genug geschildert.
    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!