Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zeitabschnitt ermitteln
Lionchik - Fr 14.03.03 12:41
Titel: Zeitabschnitt ermitteln
Hallo! Ich habe als Delphi-Anfänger eine ziemlich primitive Frage, die jeder mir wahrscheinlich problemlos beantworten kann.
Also:
Ich habe zwei Daten vom Typ Date, und ich will ihren Abstand von einander ermitteln - also wieviele Tage liegen zwischen ihnen - das heisst eine von der anderen subtrahieren. Jedoch bekomme ich immer absolut sinnlose Ergebnisse. Woran liegt das?
Wie kann man dieses Problem in Delphi lösen? Gibt es eine methode oder so?
Vielen dank für die antworten im voraus. :?:
Klabautermann - Fr 14.03.03 13:25
Hallo,
ich glaube nicht das die Ergebnisse sinlos sind. Gucke dir den Typ tDateTime mal genauer an, dan wirst du erkennen, das vor dem Komma die Tage stehen und nach dem Komma gebochene Tage - also Stunden, Minuten usw.
Wenn du also nur die Tagesdifferenz ausrechenen willst musst du nur die Werte vor dem Komma beachten:
Quelltext
1:
| Differenz := Trunc(Tag2) - Trunc(Tag1); |
Gruß
Klabautermann
Peter2002 - Fr 14.03.03 14:01
In der Unit DateUtils gibt es eine funktion DaysBetween
CenBells - Fr 14.03.03 14:06
| Zitat: |
| Differenz := Trunc(Tag2) - Trunc(Tag1); |
Oder man spart sich eine anwendung von trunc und verpasst dann nicht eventuell auftretende überläufe :wink:
Differenz := Trunc(Datum2 - Datum1);
Gruß
Ken
Wolff68 - Fr 14.03.03 21:58
Hier mal ein Auszug aud DateUtils:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function DaysBetween(const ANow, AThen: TDateTime): Integer; begin Result := Trunc(DaySpan(ANow, AThen)); end;
function DaySpan(const ANow, AThen: TDateTime): Double; begin Result := SpanOfNowAndThen(ANow, AThen); end;
function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime; begin if ANow < AThen then Result := AThen - ANow else Result := ANow - AThen; end; |
Zusamengesetzt ergibt das folgendes:
Quelltext
1: 2: 3: 4:
| if ANow < AThen then Result := Trunc(AThen - ANow) else Result := Trunc(ANow - AThen); |
Das ganze auf eine Zeile reduziert sieht dann so aus:
Result := Abs(Trunc(ANow - AThen));
Übrigends: ein Trunc(ANow) - Trunc(AThen) ergibt die Anzahl der angebrochenen Tage, wobei Trunc(ANow - AThen) die Anzahl der vollen Tage (Also die Anzahl abgelaufener 24-Stunden intervalle) angibt.
Beispiel: 10.10.03 23:00 bis 12.10.03 01:00
Trunc(ANow-AThen) = 1
Trunc(ANow) - Trunc(AThen) = 2
DaysBetween gibt übrigends das erste Ergebnis zurück, wobei wohl meistens das zweite benötigt wird...
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!