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 Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

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!