Wie viele Tage sind vergangen? Lösen wir die ewige Aufgabe in C#
\n\nStellen Sie sich vor: Sie schreiben eine Anwendung zur Urlaubsverwaltung, einen Aufgabenplaner oder möchten einfach wissen, wie viele Tage bis zum neuen Jahr verbleiben. Und dann stellt sich die klassische Frage: „Wie berechnet man die Differenz zwischen zwei Daten in C#?“. Diese Anfrage ist eine der beliebtesten auf Stack Overflow, und das aus gutem Grund. Die Arbeit mit Daten ist eine Grundlage, die jeder Entwickler kennen muss.
\n\nIn diesem Artikel geben wir nicht nur eine trockene Antwort. Wir erklären alles anhand von lebendigen Beispielen, zeigen Fallstricke auf und bringen Ihnen bei, die Anzahl der Tage (und nicht nur) zwischen zwei beliebigen Zeitpunkten zu ermitteln. Los geht‘s!
\n\nDer einfachste Weg: Ein Datum vom anderen subtrahieren
\n\nIn C# gibt es für die Arbeit mit Daten und Zeiten die leistungsstarke Struktur DateTime. Das Hauptgeheimnis ist, dass Sie beim Subtrahieren eines DateTime-Objekts von einem anderen keine Zahl, sondern ein spezielles Objekt erhalten – TimeSpan. Dieses speichert die Differenz.
Basisbeispiel: Differenz in Tagen zwischen zwei konkreten Daten
\n\nAngenommen, Sie möchten wissen, wie viele Tage zwischen dem 1. März 2024 und dem 10. Mai 2024 vergangen sind.
\n\nusing System;\n\nclass Program\n{\n static void Main()\n {\n // Zwei Daten erstellen\n DateTime startDate = new DateTime(2024, 3, 1);\n DateTime endDate = new DateTime(2024, 5, 10);\n\n // Differenz berechnen\n TimeSpan difference = endDate - startDate;\n\n // Anzahl der ganzen Tage ermitteln\n int days = difference.Days;\n\n Console.WriteLine($"Differenz in Tagen: {days}");\n // Ausgabe: Differenz in Tagen: 70\n }\n}\n\n\nGanz einfach, nicht wahr? Der Operator - ist für DateTime überladen und gibt TimeSpan zurück. Die Eigenschaft .Days gibt die ganze Anzahl der Tage zurück (ohne Stunden, Minuten und Sekunden).
Differenz mit „heute“ berechnen
\n\nOft muss man berechnen, wie viele Tage von einem Ereignis bis zum aktuellen Zeitpunkt vergangen sind. Dafür verwenden wir DateTime.Now oder DateTime.Today.
DateTime today = DateTime.Today; // Nur Datum, Uhrzeit 00:00\nDateTime someDay = new DateTime(2025, 1, 1); // 1. Januar 2025\n\nTimeSpan diff = someDay - today;\n\nConsole.WriteLine($"Bis zum neuen Jahr verbleiben: {diff.Days} Tage");\n\n\nBeachten Sie: DateTime.Today gibt das aktuelle Datum mit der auf 00:00:00 gesetzten Uhrzeit zurück. Dies ist praktisch, wenn Stunden und Minuten für Sie nicht wichtig sind.
Und wenn mehr als nur Tage benötigt werden?
\n\nDie Struktur TimeSpan besteht nicht nur aus .Days. Sie hat auch andere nützliche Eigenschaften, die nützlich sind, wenn Sie die Funktionalität erweitern möchten.
- \n
.Days– Anzahl der ganzen Tage. \n .Hours– Stunden (von 0 bis 23). \n .Minutes– Minuten. \n .Seconds– Sekunden. \n .TotalDays– Gesamtanzahl der Tage als Dezimalzahl (z. B. 70.5). \n .TotalHours– Gesamtanzahl der Stunden. \n
Beispiel mit TotalDays
\n\nStellen Sie sich vor, die Differenz zwischen den Daten beträgt genau 36 Stunden. Die Eigenschaft .Days zeigt 1 (weil es ein ganzer Tag und 12 Stunden sind). .TotalDays zeigt hingegen 1.5.
DateTime start = new DateTime(2024, 1, 1, 0, 0, 0);\nDateTime end = new DateTime(2024, 1, 2, 12, 0, 0); // 1. Januar + 1 Tag und 12 Stunden\n\nTimeSpan span = end - start;\n\nConsole.WriteLine($"Tage (ganze): {span.Days}"); // 1\nConsole.WriteLine($"Gesamt Tage: {span.TotalDays}"); // 1.5\n\n\nWenn Ihre Aufgabe nur darin besteht, die Anzahl der vollen Tage zu ermitteln, verwenden Sie .Days. Wenn Sie einen genauen Wert mit Bruchteilen benötigen, nehmen Sie
Blogs
Buchempfehlungen
Lesen Sie auch
Ein Tag im Leben eines Rust-Entwicklers: vom Morgenkaffee bis zum abendlichen Cargo
PHP-Warteschlangen und Hintergrundaufgaben: Website-Beschleunigung
So formatieren Sie Zahlen mit Tausendertrennzeichen in C#: Eine vollständige Anleitung
Der Elvis-Operator in Kotlin: ?: funktioniert nicht so, wie du denkst
Go + KI: Wie neuronale Netze die Codegenerierung in Projekten beschleunigen