Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Countdown (Monate / Tage / Stunden / Minuten / Sekunden) (https://www.delphipraxis.net/74745-countdown-monate-tage-stunden-minuten-sekunden.html)

thomasd 8. Aug 2006 07:55


Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
Hallo Leute!

Ich versuche mich seit nunmehr einem Tag daran einen Countdown zu programmieren, um die Zeitkomponenten in Delphi besser verstehen zu können.

Ich habe dazu gegoogelt und bei euch im Forum gestöbert, allerdings habe ich noch immer ein großes Fragezeichen im Kopf.

EncodeDateTime / DecodeDateTime und FormatDateTime hat mir nichts gebracht.

:wall:

Ziel ist folgendes:

Ich habe ein Formular und einen Timer (Intervall 1000 ms). Ich habe einen Tag in der Zukunft

29.09.2006 15:30:00.0

und nun möchte ich die Differenz zwischen Now() und diesem Datum ausgewiesen bekommen (aktualisiert per Intervall).

das wären jetzt (08.08.2006 08:52:32.0)

x Monate / x Tage / x Stunden / x Minuten / x Sekunden.

Alles was ich bislang errechnet habe ich voll fürn Ar... .

Bitte um Hilfe!

Mfg

Thomas

fwsp 8. Aug 2006 08:12

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
wie berechnest du denn?
vielleicht kennst du div und mod?

Klaus01 8. Aug 2006 08:16

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
Hallo Thomas,


ersteinmal kannst Du Dein Termin der in der Zukunft liegt
in eine float umwandeln, das geht mit
StrToDateTime

Du kannst dann die Differenz zu now berechnen.

Der ganzzahlige Anteil beschreibt die Anzahl der 24 Stunden Intervalle (Tage)
Aus der Hilfe:

The integral part of a TDateTime value is the number of days that have passed since 12/30/1899.
The fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed.

Damit kannst Du dann weiter rechnen.

Die Angabe von Monaten würde ich mir sparen, da die Monate eh nicht konstant lang sind.
Sie sind keine feste Größe der Zeit, das sind nur Tage, Minuten...

Grüße
Kalus

Phoenix 8. Aug 2006 08:21

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
Also.. EncodeDateTime: http://www.dsdt.info/referenz/kategorie/?id=270

Du packst da also den Tag in der Zukunft rein und bekommst ein TDateTime zurück:
Delphi-Quellcode:
var
  irgendwann, Differenz: TDateTime;
beginn
  irgendwann := EncodeDateTime(2007, 01, 17, 20, 44, 0, 0);
  Differenz := irgendwann - now();
end;
Nun ist die Differenz die Anzahl an Millisekunden zwischen diesen Tagen. Mit DecodeDateTime bekommst Du aber das Datum/die Zeit die diese Anzahl an Millisekunden vom Datum '0' entfernt ist. Das hilft Dir also nicht.

Du musst diese Zahl die Du dann da hast z.B. durch 86400000 Teilen um die Anzahl der Tage zu bekommen die da drin stecken (1000ms * 60 = sek. * 60 = Min. * 60 = Stunden * 24 = Tage).

Also mit Div und Mod für den Rest bist Du schon gut beraten.

RavenIV 8. Aug 2006 08:28

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
hast Du dir mal die Unit "DateUtils" und in der Delphi-Hilfe die Kategorie "Datum/Zeit" angeschaut?
Dort gibt es jede Menge Funktionen, um Zeit/Datum-Werte zu manipulieren / auszuwerten...

Hawkeye219 8. Aug 2006 08:39

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
Willkommen in der Delphi-PRAXiS, Thomas!

Zitat:

Zitat von Phoenix
Nun ist die Differenz die Anzahl an Millisekunden zwischen diesen Tagen.

Nicht ganz richtig, oder? In Differenz steht die Zeitspanne zwischen den beiden Daten in Tagen, der Nachkommaanteil gibt dabei den Bruchteil eines Tags an.

Wie Klaus schon richtig bemerkte, ist es nicht sinnvoll, die Anzahl Monate auszugeben. Den Bruchteil kann man sehr einfach mit DecodeTime decodieren:

Delphi-Quellcode:
var irgendwann : TDateTime;
    Differenz : TDateTime;
    h, m, s, ms : Word;
begin
  irgendwann := StrToDateTime('29.09.2006 15:30:00.0');
  Differenz := irgendwann - Now;
  DecodeTime (Differenz, h, m, s, ms);
  Label1.Caption := Format('%d Tage, %d Stunden, %d Minuten, %d Sekunden',
                           [Trunc(Differenz), h, m, s]);
Gruß Hawkeye

robinWie 17. Aug 2006 17:19

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
Zitat:

Delphi-Quellcode:
[Trunc(Differenz), h, m, s]);

imho nach gibt die variable "N" die Minuten an und "M" ist für was anderes zuständig :wink:

shmia 17. Aug 2006 18:27

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
Ich habe schon vor einiger Zeit ein Countdown Programm veröffentlicht:
http://www.delphipraxis.net/internal...ct.php?t=62090
Wenn du das als Grundlage nimmst, bist du fast schon fertig.

netscanner 17. Aug 2006 19:01

Re: Countdown (Monate / Tage / Stunden / Minuten / Sekunden)
 
@ shmia :

Er sollte es doch vielleicht erst selber probieren ;)
Ich hab delphi besser gelernt indem ich es mir selbst herbeigeführt habe und euch bei fragen die PRÄZISE frage gestellt (mit nem codefetzen zusammen).

Ich würde dir (thomasd) also raten es erst selber nochmal zu probieren. gute vorschläge gibt's ja schon :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz