Autor Beitrag
Lionchik
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 14.03.03 11:41 
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 14.03.03 12: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:
ausblenden Quelltext
1:
Differenz := Trunc(Tag2) - Trunc(Tag1);					


Gruß
Klabautermann
Peter2002
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103

Win XP, Win 7
Delphi 2007 / XE3
BeitragVerfasst: Fr 14.03.03 13:01 
In der Unit DateUtils gibt es eine funktion DaysBetween
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 14.03.03 13: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Fr 14.03.03 20:58 
Hier mal ein Auszug aud DateUtils:
ausblenden 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:
ausblenden 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...

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."