Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeitberechnung mit Tageswechsel (https://www.delphipraxis.net/127556-zeitberechnung-mit-tageswechsel.html)

NetSonic 15. Jan 2009 12:05


Zeitberechnung mit Tageswechsel
 
Hallo Delphi-Gemeinde...

ich bekomme bei folgenden Problem einfach nicht die richtige Idee:

Ich habe in einem Programm eine Zeitberechnung, die mir anzeigt, wie lange ggf. ein Vorgang noch läuft, der von mir gestartet wurde. Es ist also z.B. hinterlegt, wie lange es dauert, bis 50 Pakete von Lager A nach Lager B trasportiert sind. Dieser Vorgang heißt jetzt "Lager von A nach B - 50"... Das alles steht inkl. Zeitvorgabe (hier z.B. 00:03:00) in einer Datenbank.
Nun wähle ich in meinem Programm diesen Vorgang aus und starte folgenden Ablauf:

1. Das Programm errechnet ausgehend von der aktuellen Zeit das Ende des Vorgangs
Start: 12:00:00
Dauer: 00:03:00
Ende ist also 12:03:00
2. Ein Countdown zeigt mir die Restlaufzeit an und gibt mir eine Meldung, wenn die Zeit um ist.

Wenn jetzt aber die Startzeit z.B. um 23:59:30 ist und somit die Endzeit um 00:02:30 liegt, erfolgt keine Meldung, obwohl der Countdown erfolgt. Der Sourcecode schaut so aus... Die Zeitangaben sind alle vom Typ TDateTime. Die Variable "tEndzeit" ist Global.

Beim Start:
Delphi-Quellcode:
tEndzeit := Time + StrToTime('00:03:00');
Timer1.Enabled := True;
Im Timer (1000ms)
Delphi-Quellcode:
tCalcTime := tEndzeit - Time;
Label1.Caption := TimeToStr(tCalcTime);
if (tCalcTime <= StrToTime('00:00:00')) then
begin
Timer1.Enabled := False;
MessageDlg('Vorgang sollte abgeschlossen sein!', mtWarning, [mbOK], 0);
end;
Wo ist denn da mein Denkfehler???

Nersgatt 15. Jan 2009 12:26

Re: Zeitberechnung mit Tageswechsel
 
Du musst das Datum in Start- und Endzeit mit einbeziehen.
Für Dein Beispiel:
Start = 15.01.2008 23:59:30
Ende = 16.01.2008 00:02:30

Damit kannst Du dann Abfragen, ob die Endzeit überschritten wurde.

ChrisE 15. Jan 2009 12:35

Re: Zeitberechnung mit Tageswechsel
 
Hallo,

nur so ein Gefühl:
Deine Berechnungen erzeugen im Datums-Teil von TDateTime ungewollte Veränderungen oder eben genau nicht :-)

Ich würde das ganze eher so machen:

Delphi-Quellcode:
tEndzeit := now + StrToTime('00:03:00');
Timer1.Enabled := True;

//in OnTimer
tCalcTime := tEndzeit - now;
Label1.Caption := TimeToStr(tCalcTime);
if (tEndZeit <= now) then
begin
Timer1.Enabled := False;
MessageDlg('Vorgang sollte abgeschlossen sein!', mtWarning, [mbOK], 0);
end;
Unterschied ist anstatt Time besser now zu verwenden und zu prüfen ob die Endzeit in der Vergangenheit liegt.

Gruß, Chris

NetSonic 15. Jan 2009 13:04

Re: Zeitberechnung mit Tageswechsel
 
@ChrisE: Habs jetzt mit Now gelöst und das funktioniert auch! Danke. Manchmal kommt man einfach nicht drauf :zwinker:

@Nersgatt: Danke auch für Deinen Hinweis... :thumb:

Problem gelöst!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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