TimeSpan Durchschnitt berechnen


EuroCent

Erfahrenes Mitglied
Hallo Leute :)

Ich hänge vor einem Problem :(
Ich habe ein Programm mit dem Ich Zeiten Messe, sprich Ich lass meine Anrufzeiten messen.

In meine Listbox lass ich folgendes daher speichern: "00:00"
Wo bei Ich per Code:
Code:
    Private Sub callTicks(sender As System.Object, e As System.EventArgs) Handles tmr_CreateCallTime.Tick
        Dim nullSek As String = "0"
        Dim nullMin As String = "0"

        Sekunden += 1

        newCall = New TimeSpan(Stunden, Minuten, Sekunden)

        If (newCall.Seconds <= 9) Then
            nullSek = "0" & newCall.Seconds
        Else
            nullSek = newCall.Seconds.ToString
        End If

        If (newCall.Minutes <= 9) Then
            nullMin = "0" & newCall.Minutes
        Else
            nullMin = newCall.Minutes.ToString
        End If

        If (newCall.Seconds > 59) Then
            Minuten += 1
            Sekunden = 0
        End If

        If (newCall.Minutes > 59) Then
            Minuten = 0
            Sekunden = 0
        End If

        tb_GetCallTime.Text = nullMin & ":" & nullSek
    End Sub
Meine Frage ist nun folgende:
Wie kann Ich den Inhalt der Listbox, deren Wertte berechnen das ich einen Durchschnittswert der Inhalte bekomme?

Beispiel wie ich mir das Vorstelle:
Werte in der Listbox
- 00:15
- 00:22
- 00:12
- 00:09

Der Durchschnitt sollte also demnäch: 00:15 (gerundet von 14,5 Sekunden)

Beispiel 2:
- 01:09
- 01:22
- 02:17
- 01:44

Der Durchschnitt sollte also demnäch: 01:38

Ich hoffe Ihr könnt mir da helfen :)
 

Spyke

Premium-User
Code:
TimeSpan ts1=new TimeSpan(00,15,0);
TimeSpan ts2=new TimeSpan(00,22,0);
TimeSpan ts3=new TimeSpan(00,12,0);
TimeSpan ts4=new TimeSpan(00,09,0);

new TimeSpan( ((ts1+ts2+ts3+ts4).Ticks  / 4))
Im Prinzip nach dem Addieren mit den Ticks arbeiten und das ergebnis wieder in ein TimeSpan
 

EuroCent

Erfahrenes Mitglied
Code:
TimeSpan ts1=new TimeSpan(00,15,0);
TimeSpan ts2=new TimeSpan(00,22,0);
TimeSpan ts3=new TimeSpan(00,12,0);
TimeSpan ts4=new TimeSpan(00,09,0);

new TimeSpan( ((ts1+ts2+ts3+ts4).Ticks  / 4))
Im Prinzip nach dem Addieren mit den Ticks arbeiten und das ergebnis wieder in ein TimeSpan
Ich glaub du hast mich da etwas missverstanden :)

In der Listbox werden die Werte als String eingetragen: "00:00"
Die werden mittels Button in die Liste eingetragen, wenn ein Anruf beendet wurde.

Nun möchte Ich alle Elemente in der Listbox zusammen Addieren und durch die Anzahl der Inhalte rechnen, so das Ich dann zu meinem Durchschnitt kommen :)

Ich erkläre es nochmal anhand eines Beispiels:

Ich nehme ins gesamt 5 Anrufe entgegen die Zeitlich wie folgt erfasst werden:
- 00:12
- 00:54
- 01:55
- 00:23
- 02:13

Hier entspricht es ja logisch dass wir insgesamt 337 Sekunden haben, dass macht in der Minute:Sekunde (05:37), der Durchschnitt in Sekunden wäre hier also rund 67 (67,4) Sekunden, demnach käme es zu einem Durchschnitt bei Minute:Sekunde (01:07).

Also ist deine Lösung zwar oben ansatzweise gut erklärt, für Mich so aber Leider nicht brauchbar :(

Vielleicht gibt es noch eine andere Lösung, oder vielleicht mach Ich im Ansatz (1ster Post) etwas bereits falsch, dann möge man mich berichtigen :)

Vielen Dank :)
 

Spyke

Premium-User
Ich glaube wir reden vom gleichen.

1. Leeren neuen TimeSpan anlegen "Summen TimeSpan"
2. Durch deine zeiten iterieren (in einer schleife durchlaufen).
3. Den iterierten Zeitenwert von string nach TimeSpan umwandeln (mir ist gerade keine .Net Methode bekannt die das direkt macht, ev. DateTime.TryParseExact mit entsprechenden Formatierungsangaben).
4. Den "Summen TimeSpan" hochaddieren um den konvertierten zeitenwert
5. diesen "Summen TimeSpan" dann durch anzahl Zeilen der Liste dividieren.

Pseudocode:
Code:
TimeSpan summe=new TimeSpan();
schleife i = 0 von X
{
     TimeSpan zeile = Konvertiere(stringWert[i]);
      summe = summe + zeile;
}

TimeSpan durchschnitt=new TimeSpan( summe.Ticks  / X))