durchschnittsberechnung von uhrzeiten ...

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

rechne sie in minuten um. 2:58 wäre dementsprechend 2x60 +58 = 178. dann berechnest du aus diesen zahlen den durschnitt und teilst dann wieder durch 60 um die Uhrzeit zu bekommen.

Soph99  13.08.2013, 00:39

wär auch mein Vorschlag gewesen ^^

1
Wombat95 
Fragesteller
 13.08.2013, 00:47

ok, habs auf diese weise mal ausprobiert, aber komm nich so wirklich weit ... hab mal 8,75 raus, weiß aber damit nichts anzufangen und auch nich wie man weiterrechnen muss ... genaue beispielrechnungen würden mir wohl weiterhelfen ...

0
Ghettosuperstar  13.08.2013, 01:00
@Wombat95

pass auf, rechnen wir mal den durschnitt zwischen 2 und 2:30. 2= 2x 60 =120 2:30 = 2x60 +30 = 150. 150+120 = 270. So jetzt hast du 270 als Summe aus 2 Uhrzeiten, also wird durch 2 geteilt. 270 /2 = 135. Der Durchschnitt beträgt also 135. Das rechnen wir wieder um in eine Uhrzeit, also teilen wir durch 60 (behalten aber den Rest, also ohne kommazahl.) 135/60 = 2 , denn 2x60 sind 120. es bleibt ein Rest von 15 (weil 15 nicht durch 60 teilbar ist ohne kommazahl. ALSO -> Durchschnittsuhrzeit beträgt 2:15!

1
Wombat95 
Fragesteller
 13.08.2013, 01:06
@Ghettosuperstar

wow, echt perfekt verständlich und schrittweise erklärt ... wenn ichs dann genau so mach klappts sicher, aber erst morgen, zu spät jetzt noch ... trotzdem vielen dank !!! jetzt kann ich eig. kaum noch was falsch machen ... :)

0
Franz1957  13.08.2013, 14:50
@Ghettosuperstar

Was wäre, so gerechnet, der Mittelwert aus 23:55 Uhr und 00:05 Uhr, die nur zehn Minuten auseinander liegen? Er läge nicht um Mitternacht, sondern von beiden Werten fast zwölf Stunden weit entfernt.

Nicht alles, was wie eine Zahl aussieht, ist auch eine. "Postleitzahlen" und Telefonnummern sind z.B. keine. Das lernt man allerspätestens, wenn man eine brauchbare Adressdatenbank programmieren will. Siehe meinen Hinweis an den psychironiker: Uhrzeiten sind keine Zahlen.

0
Wombat95 
Fragesteller
 14.08.2013, 14:36
@Franz1957

genau an dieser problematik scheint die berechnung auch zu scheitern ... ich habe insgesamt 45 uhrzeiten, die sich alle zwischen 23:27 und 4:36 nachts befinden ... bei meinen bisherigen berechnungsversuchen nach der vorgeschlagenen methode von Ghettosuperstar kam ich immer dann auf ein vom schätzgefühl her richtiges ergebnis, wenn ich nur jene uhrzeiten nach mitternacht in die rechnung einbezog ... demnach scheinen die wenigen uhrzeiten vor mitternacht (nur 3 von den 45) von der größenordnung her nicht in das angewandte rechenmuster zu passen ... ich muss also jetzt noch wissen wie ich eben diese 3 uhrzeiten, die aus der reihe tanzen, passend umrechnen kann ... dann würden die rechenschritte danach auch wieder stimmen und ich käme zu einem insgesamt stimmigen endresultat ...

0
Franz1957  14.08.2013, 21:08
@Wombat95

Habe ein Verfahren mit Vektoren gefunden, das diese Schwierigkeit zu überwinden scheint. Siehe Antwort mit Code.

0
Ghettosuperstar  16.08.2013, 13:59
@Franz1957

Auch meine Art der Berechnung funktioniert. Wenn sich die Uhrzeiten über mehrere Tage erstrecken, muss man den Zahlenraum vergrößern. 23 Uhr am Vortag wäre demnach -60 , 1 Uhr nachts am nächsten tag 25x60. Alles eine Frage wann man den Nullpunkt setzt! :-)

0

Wenn man die Uhrzeiten durch Vektoren darstellt, erhält man brauchbare Ergebnisse. Jeder Uhrzeit entspricht ein Einheitsvektor in der jeweiligen Stellung des Stundenzeigers. Die Durchschnitts-Uhrzeit ergibt sich aus dem Einheitsvektor in der Richtung der Vektorsumme. Das Verfahren liefert auch plausible Ergebnisse, wenn die Uhrzeiten vor und nach Null Uhr liegen. Der Durchschnitt aus 23:27 und 4:36 ist jetzt 02:01.

Hier meine Implementation in JavaScript:

<html>
<meta charset="utf-8">
<script type="text/javascript" src="sprintf.js"></script>

<h2>Mittlere Uhrzeit V. 5.2</h2>

<script>
function hhmm2mm(hhmm){
    var hh_mm = hhmm.split(':');
    return hh_mm[0]*60+hh_mm[1]*1;
}

function mm2hhmm(mm1){
    var mm2 = Math.round(mm1);
    var mm3 = mm2 % 60;
    var hh = (mm2-mm3) / 60;

    if(hh < 10) hh = "0"+hh;
    if(mm3 < 10) mm3 = "0"+mm3;
    var hhmm = ""+hh+":"+mm3;
    return hhmm;
}

function vec2mm(vec){
    var x = vec[0];
    var y = vec[1];
    var ang = Math.abs(Math.atan(y/x));
    var ang2;
    if(x>=0 && y>=0) ang2 = Math.PI/2-ang;   // Quadrant 1;
    if(x>=0 && y<0 ) ang2 = Math.PI/2+ang;   // Quadrant 2;
    if(x<0  && y<0 ) ang2 = 3/2*Math.PI-ang; // Quadrant 3;
    if(x<0  && y>=0) ang2 = 3/2*Math.PI+ang; // Quadrant 4;
    var mm = ang2*24*60/(2*Math.PI);
    return mm;
}

function mm2vec(mm){
    var ang0 = mm*2*Math.PI/(24*60);
    var ang  = Math.PI/2-ang0;
    return [Math.cos(ang), Math.sin(ang)];
}

function durchschnitt(a){
    var ra = 1;
    var xsum=0;
    var ysum=0;
    for (var i = 0; i < a.length; ++i) {
        var v1 = mm2vec(hhmm2mm(a[i]))
        var x1 = ra*v1[0];
        var y1 = ra*v1[1];
        xsum += x1;
        ysum += y1;
    }
    xdu = xsum / a.length;
    ydu = ysum / a.length;
    ldu = Math.sqrt(xdu*xdu + ydu*ydu);
    var mmdu = vec2mm([xdu/ldu, ydu/ldu]);
    var hhmmdu = mm2hhmm(mmdu);
    return hhmmdu;
}

function rechnen(){
    var ein = document.getElementById("eingabe").value;
    var aus = document.getElementById("ausgabe");
    var a = ein.split(/, */);
    var du = durchschnitt(a);
    aus.value = du;
}

function reset(){
    var ein = document.getElementById("eingabe");
    var aus = document.getElementById("ausgabe");
    ein.value = "";
    aus.value = "";
}
</script>

Uhrzeiten (Format hh:mm)<br>
<input type="text" id="eingabe" size="80" maxlength="80">
<br><br>
Durchschnitt<br>
<input type="text" id="ausgabe" size="5" maxlength="5">
<br><br>
<button type="button" onclick="rechnen()">Duchschnitt errechnen</button>
<button type="button" onclick="reset()">Reset</button>

</html>
Franz1957  14.08.2013, 21:25

Kommentar zum Code:

Das Script sprintf.js habe ich nur zu Testzwecken gebraucht. Es ist für den Algorithmus nicht notwendig. Wer es haben will: http://www.diveintojavascript.com/projects/javascript-sprintf

function hhmm2mm(hhmm) nimmt einen Uhrzeit-String im Format hh:mm entgegen und errechnet daraus die entsprechende Zahl von Minuten nach 0 Uhr.

function mm2hhmm(mm1) nimmt eine Zahl von Minuten nach 0 Uhr entgegen und bildet daraus einen Uhrzeit-String im Format hh:mm.

function vec2mm(vec) nimmt einen Vektor entgegen (Array aus x- und y-Komponente), interpretiert ihn als Stellung des Stundenzeigers und errechnet daraus die entsprechende Minutenzahl nach 0 Uhr. Da die arctan-Funktion nicht den richtigen Quadranten angeben kann, muß dieser aus den Vorzeichen der Vektorkomponenten ermittlet werden.

function mm2vec(mm) nimmt eine Zahl von Minuten nach 0 Uhr entgegen und errechnet daraus einen Vektor, der die entsprechende Stellung des Stundenzeigers angibt.

function durchschnitt(a) nimmt ein Array aus Strings entgegen, die Uhrzeiten im hh:mm-Format darstellen und errechnet daraus die Durchschnitts-Uhrzeit als String im hhmm-Format.

0
Wombat95 
Fragesteller
 17.08.2013, 12:33

vielen dank für deine mühen, aber die von dir vorgeschlagene lösungsmethode übersteigt meine fähigkeiten eindeutig ... und erlich gesagt ist es nicht dermaßen wichtig, dass ich bereit wäre so viel mühe und zeit in die berechnung zu stecken ...

0
Franz1957  17.08.2013, 14:12
@Wombat95

Ja, manche Sachen stellen sich als schwieriger heraus, als sie zunächst aussehen. Mir hat das Nachdenken darüber aber richtig Spaß gemacht. Dir deshalb vielen Dank für dieses spannende Problem!

1

pass auf, rechnen wir mal den durschnitt zwischen 2 und 2:30. 2= 2x 60 =120 2:30 = 2x60 +30 = 150. 150+120 = 270. So jetzt hast du 270 als Summe aus 2 Uhrzeiten, also wird durch 2 geteilt. 270 /2 = 135. Der Durchschnitt beträgt also 135. Das rechnen wir wieder um in eine Uhrzeit, also teilen wir durch 60 (behalten aber den Rest, also ohne kommazahl.) 135/60 = 2 , denn 2x60 sind 120. es bleibt ein Rest von 15 (weil 15 nicht durch 60 teilbar ist ohne kommazahl. ALSO -> Durchschnittsuhrzeit beträgt 2:15!

Ich würde alles zunächst auf eine Einheit umrechnen.

14:32 = 14 * 60 + 32 = 872 Minuten
2:58 = 2 * 60 + 58 = 178 Minunten
Durchschnitt:
(872 + 178) / 2 = 525
In Stunden umrechnen:
525 / 60 = 8 Rest 45 = 8:45
Woher ich das weiß:Studium / Ausbildung – Mathematik
verreisterNutzer  09.04.2022, 11:58

Das kann man aber, wenn ich es nicht falsch verstanden habe, nicht für Uhrzeiten anwenden...

0

Formal kannst du das so machen, wie Ghettosuperstar und Soph99 vorschlagen.

Die Frage ist allerdings, was es bedeuten soll, zwischen Uhrzeiten zu mitteln, die beinahe einen halben Tag auseinander liegen (14:32 Uhr und 2:58 Uhr). - Wenn dein linkes Bein in einem Eisklotz von -60°C eingeschlossen und das rechte in kochendes Wasser getunkt ist, ist das auch im Durchschnitt eine angenehme Temperatur ( (100 - 60)/2 = 20 ). Dagegen wäre mathematisch dann auch nichts zu sagen, praktisch aber irgendwie schon.

Was also soll die gemittelte Uhrzeit bedeuten?

Wombat95 
Fragesteller
 13.08.2013, 14:25

nein, ganz so ist es nicht, hab als beispiel einfach nur irgendwelche uhrzeiten genommen ... die aus denen ich den mittelwert ermitteln muss sind zeitlich schon relativ nah beieinander, also maximal 4 stunden differenz ... wäre das nicht der fall geb ich dir schon recht, wär die rechnerei eher unsinnig ...

0
Franz1957  13.08.2013, 14:57
@Wombat95

"Relativ nah beieinander" ist keine mathematische Aussage. "Maximal 4 Stunden Differenz" ist zwar eine, aber sie ist willkürlich. Um die hier diskutierte Vorgehensweise stichhaltig begründen zu können, müßtest Du sagen können, wo genau die Grenze liegt, bis zu der sie zulässig ist, und wieso. Du müßtest also genau sagen können, warum Du es bei max. 4 Std. Differenz machen kannst und bei sagen wir 5 Std. nicht.

0
Franz1957  13.08.2013, 15:26
@Franz1957

Und was nützt es, wenn die Uhrzeiten so nah beieinander liegen wie 23:55 Uhr und 00:05 Uhr?

0
Franz1957  13.08.2013, 14:46

Nicht nur praktisch, auch mathematisch kann man einiges dagegen sagen: Die Uhrzeit ist keine lineare sondern eine zyklische Größe. Mathematisch gesprochen sind die Uhrzeiten keine Zahlen, sondern ein Restklassenring modulo 24 (oder modulo 12, wenn man das bevorzugt).

http://de.wikipedia.org/wiki/Restklassenring

0
EnteWurzel  13.08.2013, 15:44
@Franz1957

Mathematisch gesprochen sind die Uhrzeiten keine Zahlen, sondern ein Restklassenring modulo 24

Die Uhrzeiten sind kein Restklassenring, sondern bilden einen Restklassenring. Außerdem kann ich eine Bijektion zwischen den Uhrzeiten und einem entsprechend gewähltem Zahlenintervall (Aus N) finden. Somit kann ich Uhreziten doch als Zahlen auffassen :)

0
psychironiker  13.08.2013, 16:01
@Franz1957

A. Gegen diese Auffassung spricht, dass die Sprechweise "ist später als" definiert ist, mithin eine Anordnung. Elemente eines Restklassenrings lassen sich aber nicht anordnen.

Ebensowenig sind Elemene eines Restklassenrings mit beliebiger Feinheit teilbar, was aber bei Uhrzeiten der Fall ist.

Meiner Ansicht nach handelt es siche eher um eine Intervall, etwa [0h, 24h), oder dessen Einschränkung auf eine Teilmenge der rationalen Zahlen (ich gebe zu, dass die Sprechweise "es ist π Uhr" oder "√(2) Uhr"wenig sinnvoll erscheint), wobei zu jedem Kalender Tag ein solches Intervall gehört (und die Kalendertage wiederum angeordnet sind).


B. Philosophisch interessant ist das allerdings sehr. Sogenannte primtive Kulturen, die ein zyklisches, in sich geschlossenes Weltbild pflegen (den Begriff des "Fortschritts" nicht kennen und ohne denselben Jahrtausende überlebten) würden dir sicher zustimmen.

0
Franz1957  13.08.2013, 16:23
@EnteWurzel

Klar, wenn wir auch das jeweilige Datum haben, können wir die Uhrzeiten einfach als Unixzeit schreiben. Da läßt sich ein Mittelwert dann sehr bequem errechnen, und wenn man davon das Datum wegläßt, (nach dem ja nicht gefragt war), dann haben wir eine "mittlere Uhrzeit"! :-D

0