Hallo, ich möchte in C# (.net) einen Zeitraum zwischen zwei Datum formatiert ausgeben. Beispiel: 01.03.2009 und 15.05.2010 soll einen String ergeben der ausgibt:
1 Jahr, 2 Monate und 14 Tage
Dabei soll natürlich NICHT vereinfachend ein Monat aus 30 Tagen und ein Jahr aus 365 Tagen bestehen. Es sollen die tatsächlichen Jahre, Monate und Tage ausgegeben werden.
Gibt es dafür einen "schicken" Weg? Alle meine Versuche laufen auf umfangreiches herumrechnen und herumformatieren raus - da hätte ich gerne einen schöneren Weg gefunden.
Schließe mich Mario an, aber um Schaltjahre richtig zu berücksichtigen muss schon etwas mehr Berechnung stattfinden. Hier gibt es Beispielcode wie Monate und Jahre zu berechnen sind. TimeSpan wird dann für 'den Rest' genutzt. Der Code aus dem Posting oben leicht modifiziert (difference brauchst Du eigentlich nicht mehr):
Danke für Eure Ideen - aber manches wirkt für mich unschön. Darum habe ich mich übers Wochenede mal hingesetzt und selbst was entwickelt. Hier ist das Resultat. Die formatierte Ausgabe habe ich erst mal weggelassen...
/// <summary> /// Berechnet den Zeitraum zwischen zwei Datum und gibt die Tage,Monate und Jahre als Int zurück. /// Berücksichtigt dabei Schaltjahre und 31/30/28 Tage pro Monat /// </summary> public void GetZeitraum(DateTime von, DateTime bis, out int tage, out int monate, out int jahre) { DateTime vonDatum = von; DateTime bisDatum = bis; if (von > bis) { vonDatum = bis; bisDatum = von; }
tage = bisDatum.Day - vonDatum.Day; monate = bisDatum.Month - vonDatum.Month; jahre = bisDatum.Year - vonDatum.Year;
if (tage < 0) { monate--; DateTime hilfsdatum = new DateTime(bisDatum.Year, bisDatum.Month, vonDatum.Day); hilfsdatum = hilfsdatum.AddMonths(-1); TimeSpan dif = bisDatum - hilfsdatum; tage = dif.Days; }
kann aber Fehler geben bei Schaltjahren