Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeitenvergleich schlägt fehl (https://www.delphipraxis.net/6987-zeitenvergleich-schlaegt-fehl.html)

CalganX 29. Jul 2003 13:30


Zeitenvergleich schlägt fehl
 
Hi,
in einem Timer.OnTimer-Event folgenden Source:
Delphi-Quellcode:
if {Get}Time >= DateTimePicker1.Time then
  ShowMessage('Its Time');
Allerdings klappt das nie...

Habt ihr da eine Idee??

Chris

PS: Ach ja: Der Kind vom DateTimePicker steht auf dkTime.

Tpercon 29. Jul 2003 13:42

Re: Zeitenvergleich schlägt fehl
 
Nimm anstatt Time now, dann sollte es gehen!

Gruß

Schwedenbitter 31. Mär 2004 19:16

Re: Zeitenvergleich schlägt fehl
 
@Chakotay1308

Funktioniert es bei Dir?
Ich wollte gern Datum und Zeit abfangen. Und zwar so:
Delphi-Quellcode:
If (Date>=On_Date.Date) And (Time>=On_Time.Time) Then
   Application.MessageBox('Ich gehe jetzt online','Online',MB_OK);
Selbst wenn ich jetzt aus ">=" lediglich ein "=" mache oder statt "Time" "Now" verwende, geht es bei mir trotzdem nicht! :wall:

Synonym 31. Mär 2004 19:21

Re: Zeitenvergleich schlägt fehl
 
@schwedenbitter: deinen namen habe ich mal abgefüllt, bei uns im labor :-)

synonym

Bernhard Geyer 31. Mär 2004 19:33

Re: Zeitenvergleich schlägt fehl
 
Time liefert nur die Uhrzeit-Wert zurück (z.B. 0.75 für 18:00) und DateTimePicker.Time liefert immer den kompletten Zeitstempel zurück (38077.xy für heute). D.h du mußt den DateTimePicker.Time um die ganzzahl "befreien".

z.B.
Code:
  if Time >= DateTimePicker.Time - Trunc(DateTimePicker.Time) then
    ShowMessage('Its Time');

Schwedenbitter 31. Mär 2004 19:46

Re: Zeitenvergleich schlägt fehl
 
So weit so gut!
Allerdings wollte ich auch noch das Datum abfragen. Außerdem verstehe ich nicht so recht, warum die Variable TTime mal so und mal so bewertet wird. Schließlich funktioniert Dein Vorgehen zwar, hat aber einen Haken: Man bekommt die Message nicht mehr weg, weil ab einem bestimmten Punkt die aktuelle Zeit immer größer ist als die eingegebene.
Ich möchte gern ein Programm schreiben, welches neben der Uhr läuft und zu bestimmten Zeiten an bestimmten Daten vordefinierte Aktionen macht (und das nur einmal).
Trotzdem erst mal Danke.

glkgereon 31. Mär 2004 19:50

Re: Zeitenvergleich schlägt fehl
 
geht das nicht mit nem boolean?

Bernhard Geyer 31. Mär 2004 19:57

Re: Zeitenvergleich schlägt fehl
 
Zitat:

warum die Variable TTime mal so und mal so bewertet wird.
Ist vieleicht etwas unglücklich von der TDateTimePicker-Komponente das sie nicht den Tages-Teil abschneidet.
TDatetime (und AFAIK TTime) ist 'ne Fließkommazahl, dessen ganze Zahl die Tage seit 31.12.1899 angiebt und der Nachkommateil den "Prozentsatz" des Tages: 0,25 = 06:00; 0,5 = 12:00; 0,75 = 18:00.

Zitat:

Dein Vorgehen zwar, hat aber einen Haken: Man bekommt die Message nicht mehr weg, weil ab einem bestimmten Punkt die aktuelle Zeit immer größer ist als die eingegebene.
Wieso mein Vorgehen? Dein Code hat doch das gleiche Verhalten (wenn es funktioniert hätte). Du mußt dir halt merken das der Zeitpunkt schon vorbei ist und einmal die entsprechende Aktion ausgeführt wurde.

glkgereon 31. Mär 2004 20:07

Re: Zeitenvergleich schlägt fehl
 
und dafür machst du das:
Delphi-Quellcode:
 
var schongemacht:boolean;
begin
schongemacht:=false;
if (Time >= DateTimePicker.Time - Trunc(DateTimePicker.Time)) and (schongemacht=false)
then   begin
        ShowMessage('Its Time');
        schongemacht:=true;
        end;
end;

Schwedenbitter 31. Mär 2004 21:49

Re: Zeitenvergleich schlägt fehl
 
Ich habe jetzt eine für mich ausreichende Lösung gefunden :-D!
Ich wandle "einfach" das von mir gewünschte Datum nebst Zeit in einen mir bekannten String um. Anschließend tue ich dasselbe in meiner Timer-Procedure auf exakt dieselbe(!) Art und Weise und vergleiche einfach die Strings miteinander. Wenn man den Timer auf 1.000 einstellt, bekommt man das Ereignis auch nur noch einmal und kann sich die Booleans sparen. Das ist auch besser so, weil man sonst bei meiner Anzahl von Aktionen schnell den Überblick verliert oder ggf. auf Array ausweichen muß, was das ganze nicht einfacher macht.
Die aktuelle Zeit könnte so aussehen,
Delphi-Quellcode:
Zeit:=Concat(DateToStr(Date),TimeToStr(Time));
das merken der Zeit z.B. so und
Delphi-Quellcode:
{   Zeitwerte merken   }
Onn:=Concat(DateToStr(On_Date.Date),   TimeToStr(On_Time.Time));
Off:=Concat(DateToStr(Of_Date.Date),   TimeToStr(Of_Time.Time));
Run:=Concat(DateToStr(Run_Date.Date),   TimeToStr(Run_Time.Time));
die Abfrage dementsprechend so:
Delphi-Quellcode:
{   online gehen?      }
If Zeit=Onn Then
Begin
   Application.MessageBox('Ich gehe jetzt online','Online',MB_OK);
End;
Wer noch eine bessere Idee hat, bitte trotzdem melden. Ich bin immer bereit, neues zu lernen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.
Seite 1 von 2  1 2      

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