Entwickler-Ecke
Sonstiges (Delphi) - Countdown Problem
Nightwalker_Z - Mo 07.07.03 20:55
Titel: Countdown Problem
Hallo Leutz,
ich hab folgendes Problem: Ich will ne Prozedur schreiben:
Delphi-Quelltext
1: 2: 3: 4:
| Procedure DayDiff(Date1, Date2:TDateTime; var rem_days, rem_hours, rem_min, rem_sec:integer); 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):
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 - Mo 07.07.03 21:38
---
Nightwalker_Z - 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 - 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:
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); var Diff : real; Begin Diff := ABS(Date1-Date2); rem_days := trunc(Diff); Diff := Frac(Diff)*24; rem_hours := trunc(Diff); Diff := Frac(Diff)*60; rem_min := trunc(Diff); Diff := Frac(Diff)*60; rem_sec := trunc(Diff); 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.
Delete - 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 - 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 - 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:
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.
Delete - Mo 07.07.03 22:35
Und wenn man die Sourcen nicht hat, kann man nicht reinkucken. :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!