Autor Beitrag
Nightwalker_Z
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 07.07.03 20:55 
Hallo Leutz,

ich hab folgendes Problem: Ich will ne Prozedur schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Procedure DayDiff(Date1, Date2:TDateTime; var rem_days, rem_hours, rem_min, rem_sec:integer); // pre Date2>Date1
Begin

end;

Sprich: Datum1 sei jetzt, Datum2 ist irgendwann in der Zukunft. In die Variablen will ich die verbleibenden Tage (rem_days), Stunden (rem_hours), Minuten(rem_min) und Sekunden(rem_sec) wiedergeben. Die Tage hab ich schon hinbekommen (mit Hilfe der JCL Library):
ausblenden Delphi-Quelltext
1:
rem_days:=DayOfTheYear(Date2)-DayOfTheYear(Date1);					

Aber bei den Stunden, Minuten und Sekunden steh ich absolut auf dem Schlauch :( (und das bei nem angehenden Dipl. Ing. IT - die Pieeesa Stuhdie schlegt mahl wider foll ahn) :D

Kann mir jemand bei der Prozedur helfen ???

Grüsse
Nightwalker_Z
Leathl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Mo 07.07.03 21:38 
---


Zuletzt bearbeitet von Leathl am Sa 15.08.09 16:37, insgesamt 1-mal bearbeitet
Nightwalker_Z Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 07.07.03 21:59 
Stimmt nicht ganz :D

so wie ich deinen Code verstehe, berechnest du die Jahreszahlen. Trotzdem Danke für deine Bemühungen. Möchte doch nur folgende Anzeige: (z.B.) Zeit verbleiben 25 Tage, 16 Stunden, 43 Minuten und 20 Sekunden - Zwischen Date1 und Date2 (wobei Date1:=Now und Date2 irgendwann in der Zukunft ... z.B.: Date2:=strtodate(19.09.2003 20:13:20)

Noch irgendwelche Vorschläge ?? (bittteee)

Greetz
Nightwalker_Z
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Mo 07.07.03 22:05 
Hast Du Dir mal angeschaut, wie TDateTime aufgebaut ist?
Das ist eine Realzahl, wobei vor dem Komma die Tage stehen, und hinter dem Komma der Bruchteil des Tages.

Somit kommen wir nur mit ein bischen Mathematik der Lösung auf die Spur:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Procedure DayDiff(Date1, Date2:TDateTime; var rem_days, rem_hours, rem_min, rem_sec:integer); // pre Date2>Date1
var
  Diff : real;
Begin
  Diff := ABS(Date1-Date2); // Differenz ohne Vorzeichen
  rem_days  := trunc(Diff); // Volle Tage = ganzzahliger Teil
  Diff := Frac(Diff)*24;    // Nachkommateil * 24
  rem_hours := trunc(Diff); // Volle Stunden = ganzzahliger Teil
  Diff := Frac(Diff)*60;    // Nachkommateil * 60
  rem_min := trunc(Diff);   // Volle Minuten = ganzzahliger Teil
  Diff := Frac(Diff)*60;    // Nachkommateil * 60
  rem_sec := trunc(Diff);   // Volle Sekunden = ganzzahliger Teil
end;

Also ganz einfach den Nachkommateil immer multiplizieren, dann steht vor dem Komma das gewünschte Ergebnis. 8)

Ach ja: mit dem ABS() beim bilden der Differenz ist es völlig egal welches der beiden Daten größer war.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.07.03 22:14 
EncodeDatetime und FormatDateTime und alles was damit zusammenhängt wären wohl auch noch von interesse. Desweiteren wohl noch DaysBetween.
Nightwalker_Z Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 07.07.03 22:15 
Danke! Funktioniert wunderbar. Stand irgendwie auf dem Schlauch 8) (das kann man hinterher immer sagen)

Aufgabe gelöst: Gibt ne glatte 1 bei mir !!! (schade, dass es nicht wie bei eBay Bewertungen gibt)

Bis zu meiner nächsten Frage (oder Antwort auf irgendeine Frage, die ich auch beantworten kann)

Schönen Abend noch und freut euch auf das Wochenende

Nightwalker_Z
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Mo 07.07.03 22:31 
Luckie hat folgendes geschrieben:
EncodeDatetime und FormatDateTime und alles was damit zusammenhängt wären wohl auch noch von interesse. Desweiteren wohl noch DaysBetween.


OK, diese Funktionen sind vielleicht einen kurzen Blick wert.
Aber DaysBetween??? Und das von Dir??? Also mir reicht da dieses hübsche, kleine Minus-Zeichen mit einem Trunc() und einem ABS()

Besonders vor dem Einbinden der DateUtils würde ich immer empfehlen, sich die Funktionen dort mal im Quelltext anzusehen. Damit erübrigt sich meist schon das Einbinden dieser Unit.

Hier mal ein Auszug aus DateUtils zu DaysBetween: :rofl:
ausblenden Delphi-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;


Was für ein Schwachsinn, wenn es mit Result :=Trunc(ABS(ANow-AThen)) genauso geht.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.07.03 22:35 
Und wenn man die Sourcen nicht hat, kann man nicht reinkucken. :wink: