2016-08-25 3 views
-1

Ich soll den Durchschnitt einer Reihe von Zeitspannen berechnen, wobei jede Zeitspanne eine Subtraktion zwischen zwei Daten ist.Durchschnittlicher Zeitraum berechnen

DateTime a = GetStartDateTime(); 
DateTime b = GetEndDateTime(); 

var delta = b.Subtract(a).TotalDays; 

Datumsformat ist wie 22.08.2016 21:00:00

Gibt es eine Möglichkeit, dies rationeller zu tun?

Auch bin ich neugierig, warum meine delta immer wie 0.26914351851851853 ist, mit anderen Worten, warum ist es keine ganze Zahl?

UPDATE: Hier ist beispielsweise Zeit umspannt:

23.08.2016 10:31:38 - 22.08.2016 21:00:00 
24.08.2016 14:32:26 - 24.08.2016 21:00:00 
17.08.2016 8:36:51 - 01.01.2016 21:00:00 
17.08.2016 8:34:27 - 15.03.2016 21:00:00 
+0

'TotalDays' gibt die Nachkommastellen der Tage zurück. –

+2

Da Sie TotalDays verwenden, wenn Sie nur vollständige Daten haben möchten, können Sie sie mit int() (int) b.Sutract (a) .TotalDays; ' – Marcus

+0

in int umwandeln Sie haben kein Beispiel für eine Zeitspanne angegeben schwer, deinen ersten Absatz mit dem Rest zu verheiraten ... –

Antwort

1

Führen Sie eine einfache Mittelwertberechnung über den Ticks Wert aller Ihrer Timespans und erstellen Sie einen neuen Zeitraum von dem Ergebnis. Das wird den durchschnittlichen oder durchschnittlichen TimeSpan darstellen. z.B.

 var timeSpanList = new List<TimeSpan>(); 
     var provider = CultureInfo.InvariantCulture; 
     timeSpanList.Add(
      new TimeSpan(
       DateTime.ParseExact("23.08.2016 10:31:38", "dd.MM.yyyy H:mm:ss", provider).Ticks - 
       DateTime.ParseExact("22.08.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks)); 
     timeSpanList.Add(
      new TimeSpan(
       DateTime.ParseExact("24.08.2016 14:32:26", "dd.MM.yyyy H:mm:ss", provider).Ticks - 
       DateTime.ParseExact("24.08.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks)); 
     timeSpanList.Add(
      new TimeSpan(
       DateTime.ParseExact("17.08.2016 8:36:51", "dd.MM.yyyy H:mm:ss", provider).Ticks - 
       DateTime.ParseExact("01.01.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks)); 
     timeSpanList.Add(
      new TimeSpan(
       DateTime.ParseExact("17.08.2016 8:34:27", "dd.MM.yyyy H:mm:ss", provider).Ticks - 
       DateTime.ParseExact("15.03.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks)); 
     var totalTicks = 0L; 
     foreach(var ts in timeSpanList) 
     { 
      totalTicks += ts.Ticks; 
     } 
     var avgTicks = totalTicks/timeSpanList.Count; 
     var avgTimeSpan = new TimeSpan(avgTicks); 
+0

Nachdem ich dies ein wenig betrachtet habe, ist mir aufgefallen, dass der zweite TimeSpan in Ihrer Liste einen negativen Wert (früheres Datum - späteres Datum) erzeugt. Durch Subtrahieren verringert sich hier der Gesamt-Tick, wodurch der Durchschnitt verzerrt wird (sofern dies nicht beabsichtigt ist). Wenn dies nicht beabsichtigt ist, sollten Sie sicherstellen, dass Sie immer das frühere Datum von dem späteren Datum subtrahieren. – Kevin

+0

Ich weiß, dass genau aus diesem Grund ich Zeitspanne zählen muss: Wenn die Zeitspanne negativ ist, kann ich dieses Datum sicherlich ignorieren. –

Verwandte Themen