![]() |
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:
Im Timer (1000ms)
tEndzeit := Time + StrToTime('00:03:00');
Timer1.Enabled := True;
Delphi-Quellcode:
Wo ist denn da mein Denkfehler???
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; |
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. |
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:
Unterschied ist anstatt Time besser now zu verwenden und zu prüfen ob die Endzeit in der Vergangenheit liegt.
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; Gruß, Chris |
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