Feedback

C# - Zeitdifferenz berechnen

Veröffentlicht von am 13.11.2010
(5 Bewertungen)
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, "");
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

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; 

        }
Abgelegt unter Zeitdifferenz, zeit, stunden, minuten, sekunden.

6 Kommentare zum Snippet

spezi schrieb am 13.11.2010:
zu umständlich. Sowas wie
ausgabe = end.Subtract(start).Subtract(pause).ToShortTimeString();
...hätte es auch getan
Dominic schrieb am 15.11.2010:
Ja, das verkürzt einiges. Danke für den Tipp!
Boas Enkler schrieb am 22.11.2010:
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.

Curry schrieb am 25.11.2010:
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 :(
DotNetMastermind schrieb am 29.11.2010:
@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 :

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";
}
Curry schrieb am 30.11.2010:
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...
 

Logge dich ein, um hier zu kommentieren!