Feedback

Zeitdifferenz berechnen

Sprache: C#

Mit diesem Snippet kann die Zeit zwischen zwei Uhrzeiten ausgerechnet werden. Optional können pauseminuten übergeben werden. Aufrufbeispiel: label1.Text = zeitdifferenz(textboxstart.text, textboxende.text, "");
public string zeitdifferenz(string startzeit, string endezeit, string pause) //String pause in minuten!

        { 
            // Format HH:MM z.B. 07:00. Wenn keine pause eingerechnet werden soll -> string pause = ""

            DateTime start;
            DateTime end;

            if (pause == "") 
            {
                pause = "0";
            }

            string datum = Convert.ToString(DateTime.Now);
            datum = datum.Remove(10, 9);

            string gesamtanfang = datum + " " + startzeit + ":00";
            string gesamtende = datum + " " + endezeit + ":00";

            start = Convert.ToDateTime(gesamtanfang);
            end = Convert.ToDateTime(gesamtende);

            int minuten = Convert.ToInt32(end.Subtract(start).TotalMinutes);
            //int minuten = Zeitdifferenz in Minuten | statt .TotalMinutes können natürlich auch z.B. Sekunden berechnet werden!

            int pauseminuten = Convert.ToInt32(pause);
            minuten = minuten - pauseminuten;

            int stunden;
            int rest;

            stunden = minuten / 60;
            rest = minuten % 60;

            string ausgabe = "Die Zeitspanne beträgt: " + Convert.ToString(stunden) + " Stunden und " + Convert.ToString(rest) + " Minuten";

            return ausgabe; 

        }
public string zeitdifferenz(string startzeit, string endezeit, string pause) //String pause in minuten!

        { 
            // Format HH:MM z.B. 07:00. Wenn keine pause eingerechnet werden soll -> string pause = ""

            DateTime start;
            DateTime end;

            if (pause == "") 
            {
                pause = "0";
            }

            string datum = Convert.ToString(DateTime.Now);
            datum = datum.Remove(10, 9);

            string gesamtanfang = datum + " " + startzeit + ":00";
            string gesamtende = datum + " " + endezeit + ":00";

            start = Convert.ToDateTime(gesamtanfang);
            end = Convert.ToDateTime(gesamtende);

            int minuten = Convert.ToInt32(end.Subtract(start).TotalMinutes);
            //int minuten = Zeitdifferenz in Minuten | statt .TotalMinutes können natürlich auch z.B. Sekunden berechnet werden!

            int pauseminuten = Convert.ToInt32(pause);
            minuten = minuten - pauseminuten;

            int stunden;
            int rest;

            stunden = minuten / 60;
            rest = minuten % 60;

            string ausgabe = "Die Zeitspanne beträgt: " + Convert.ToString(stunden) + " Stunden und " + Convert.ToString(rest) + " Minuten";

            return ausgabe; 

        }

6 Kommentare

  1. im Sinne des Soc Sollten die Differenz Berechnung und die Stringformatierung auf eigene Methoden aufgegliedert werdem, so ist der code 1. kaum testbar und 2. kaum wiederverwendbar.

  2. Sry, aber das Snippet ist eines der schlechtesten Codes, die ich je zu Gesicht bekommen habe.

    – Wieso string-Parameter und keine DateTime? -> fehleranfällig z.B. bei falscher Eingabe
    – Für was um Himmelswillen eine Pause?
    – in der DateTime-Klasse gibt es doch eh schon alles. Für was das Rad neu erfinden? :S

    Jeder war mal blutiger Anfänger, aber dann stellt man doch nicht so einen Code ins Internet 🙁

  3. @curry
    Ich denke, dass als Parameter der string-Datentyp gewählt wurde, damit eine Übergabe der TextBox-Einträge ohne Konvertierung möglich ist.

    @Dominic
    Dennoch ist dieses Snippet sehr umständlich geschrieben und kann auf nur einige wenige Zeilen gekürzt werden :

    [code]private string zeitdifferenz(string startzeit, string endezeit, string pause)
    {
    int Hours = DateTime.Parse( endezeit ).Hour – DateTime.Parse( startzeit ).Hour;
    int Minutes = DateTime.Parse( endezeit ).Minute – DateTime.Parse( startzeit ).Minute;
    int Pause;

    Int32.TryParse( pause, out Pause );
    int OverallMinutes = (Hours * 60 + Minutes) – Pause;

    return „Die Zeitspanne beträgt: “ + (OverallMinutes / 60).ToString() + “ Stunden und “ + (OverallMinutes % 60).ToString() + “ Minuten“;
    }[/code]

  4. Ja, das habe ich natürlich gesehen. Aber das ist trotzdem nicht recht sinnig. (Wiederverwendbarkeit! -> Universeller denken und nicht nur an den Datenzufluss durch die TextBox denken)

    Sinnvoller wäre es, die gegebenen String mithilfe von DateTime.TryParse zu überprüfen und dann als DateTime-Objekte zu übergeben. Oder am einfachsten wäre es natürlich, DateTimePicker zu verwenden…