Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - MinuteSpan unter D5
maxk - So 09.11.03 17:30
Titel: MinuteSpan unter D5
Ich hoffe ich habe jetzt die richtige Sparte erwischt...
Also unter D6 gibt es die unit DateUtils, die viele praktische Funktionen anbietet. Darunter auch MinuteSpan und SecondSpan. Beim Versuch, das Prog unter D5 zu compilen traf ich auf ein Problem. Es gibt werder MinuteSpan noch DateUtils. Ich brauche diese Funktionen aber. Kennt jemand einen Codeschnipsel? MinuteSpan errechnet die Minuten zwischen zwei TDateTimes. Die Funktion würde mit den Parametern '01.01.2000 00:00:00' und '01.01.2000 00:02:30' würde 2,5 zurückgegeben.
Danke schon mal im Voraus,
maxk
Anonymous - So 09.11.03 17:43
MinuteSpan wäre dann:
wenn a nach b ist, ansonsten eben umgekehrt. MinsPerDay ist in SysUtils. Für die anderen Funktionen musst du MinsPerDay durch SecsPerDay etc. ersetzen.
Wolff68 - Mo 10.11.03 20:45
Und wenn Du nicht sicher bist ob a > b ist, mach einfach ein ABS() drumrum.
Delphi-Quelltext
1:
| Result := MinsPerDay * ABS(a-b); |
Hier übrigends mal die entsprechenden "CodeSchnipsel" aus der DateUtils:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function MinuteSpan(const ANow, AThen: TDateTime): Double; begin Result := MinsPerDay * SpanOfNowAndThen(ANow, AThen); end;
function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime; begin if ANow < AThen then Result := AThen - ANow else Result := ANow - AThen; end; |
Wobei ich die SpanOfNowAndThen irgendwie übertrieben find. Ein Abs() tuts auch...
barfuesser - Di 11.11.03 09:59
| Wolff68 hat folgendes geschrieben: |
| Wobei ich die SpanOfNowAndThen irgendwie übertrieben find. Ein Abs() tuts auch... |
Das spart einen Funktionsaufruf! Und da man davon ausgehen sollte, daß der Delphi-Code auch in aufwendigen Schleifen wiederholt ausgeführt werden kann, sollte dieser schon auf zusätzliche Funktionsaufrufe verzichten.
barfuesser
Wolff68 - Di 11.11.03 18:21
Und worin liegt jetzt der genaue Unterschied zwischen
SpanOfNowAndThen(ANow, AThen) und Abs(ANow-AThen) ?
Beides sind Funktionsaufrufe. Wobei bei SpanOf 2 Variablen übergeben werden und bei ABS nur einer (der dafür gleich ausgerechnet wird).
maxk - Do 13.11.03 19:00
Danke, hat funktioniert. Übrigens, warum ist der Abstand von 01:00:00 bis 02:00:00 nicht 60 Minuten, sondern 59,99999967..?
maxk
barfuesser - Do 13.11.03 19:22
| maxk hat folgendes geschrieben: |
| Übrigens, warum ist der Abstand von 01:00:00 bis 02:00:00 nicht 60 Minuten, sondern 59,99999967..? |
Vielleicht ein Rundungsfehler? Real-Typen können nur mit einer begrenzten Genauigkeit gespeichert werden und werden deshalb gerundet. Außerdem ist zu beachten, daß RealZahlen, die im Zehnersystem nur eine begrenzte Stellenzahl haben, im Binärsystem durchaus bis zu unendlich viel Stellen haben können. Aus diesem Grund kommt es bei der Benutzung von Realzahlen - wozu auch TDateTime gehört - immer wieder zu geringfügigen Abweichungen.
barfuesser
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!