AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeiten vergleichen

Ein Thema von Headi · begonnen am 1. Mai 2006 · letzter Beitrag vom 2. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#1

Zeiten vergleichen

  Alt 1. Mai 2006, 17:41
Hi dpler,

Habe leider wieder Mal ein kleines Problem.
Und zwar habe ich einen Button beim klick startet dieser einen von zwei Timern.
Dieser Timer soll jetzt jede sekunde überprüfen ob DateTimePicker1.Time und now gleich sind.
DateTimePicker1.Time = now geht da natürlich nicht, desshalb habe ich mir diesen Code gebastelt:

Delphi-Quellcode:
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin
If DateTimePicker1.Time < now then
begin
 If DateTimePicker1.Time+0.00001 > now then
  begin
   //hier der code der ausgeführt wird
  end;
end;
end;
In meinem Testprogramm funktionierte dieser Code auch.
Aber dann im echten Programm funktioniert dieser nicht mehr.

Kann mir vielleicht jemand den richtigen Code geben?

Vielen vielen dank

greez headi
Pascal
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 17:58
Hi, du könntest dafür auch das Gleichheitszeichen nehmen. Und zwar dann, wenn du im NOW die darin enthaltenen Millisekunden jedesmal auf Null zurückstellst:

if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.197 Beiträge
 
Delphi 12 Athens
 
#3

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 18:07
Es wird wohl einfach nur so sein, das die Diverenz größer als 0,00001 ist.

Speicher einfach, ob der Code schon ausgeführt wurde
Delphi-Quellcode:
Var ausgefuehrt: Boolean;

procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin
  If (DateTimePicker1.Time < now) and not ausgefuehrt then
  begin
    ausgefuehrt := True;
    //hier der code der ausgeführt wird
  end;
end;


// ausgefuehrt muß natürlich vorher FALSE sein
oder schalte einfach den Timer aus
Delphi-Quellcode:
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin
  If DateTimePicker1.Time < now then
  begin
    Timer1.Enabled := False;
    //hier der code der ausgeführt wird
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 18:52
Hallo Pascal,

in Now ist auch der aktuelle Tag enthalten, darum würde ich den Vergleich so ausführen:

if DateTimePicker.Time < Frac(Now) then ... Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#5

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 19:26
Hallo,

vielleicht hilft dir Delphi-Referenz durchsuchenCompareDateTime.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 19:26
Zitat von TStringlist:
Hi, du könntest dafür auch das Gleichheitszeichen nehmen. Und zwar dann, wenn du im NOW die darin enthaltenen Millisekunden jedesmal auf Null zurückstellst:

if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...
Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.


Zitat von himitsu:
Es wird wohl einfach nur so sein, das die Diverenz größer als 0,00001 ist.

Speicher einfach, ob der Code schon ausgeführt wurde
Delphi-Quellcode:
Var ausgefuehrt: Boolean;

procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin
  If (DateTimePicker1.Time < now) and not ausgefuehrt then
  begin
    ausgefuehrt := True;
    //hier der code der ausgeführt wird
  end;
end;


// ausgefuehrt muß natürlich vorher FALSE sein
oder schalte einfach den Timer aus
Delphi-Quellcode:
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin
  If DateTimePicker1.Time < now then
  begin
    Timer1.Enabled := False;
    //hier der code der ausgeführt wird
  end;
end;

Geht leider auch nicht, ausschalten kann ich ja sowieso, aber er vergleicht ja nicht richtig.
Bei diesem code ist immer jenachdem nach oben oder unten offen.
Auch wenn ich die Diverenz grösser mache, funktioniert es nicht.




Zitat von marabu:
Hallo Pascal,

in Now ist auch der aktuelle Tag enthalten, darum würde ich den Vergleich so ausführen:

if DateTimePicker.Time < Frac(Now) then ... Grüße vom marabu
Und bei diesem Code passiert irgendwie auch wieder nichts.

Liegt das wirklich an mir?

Kann mir mal jemand sagen was ich falsch mache?

greez headi
Pascal
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 19:35
Zitat von Headi:
Zitat von TStringlist:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...
Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.
Dafür brauchst du die Unit 'DateUtils' in der Uses-Klausel.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 19:42
Wenn ein Vergleich nicht so funktioniert, wie du es erwartest, dann schaue dir die Werte mal an, welche du miteinander vergleichen willst.

ShowMessage(DateTimeToStr(DateTimePicker.Time)); marabu
  Mit Zitat antworten Zitat
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Zeiten vergleichen

  Alt 1. Mai 2006, 22:06
Zitat von TStringlist:
Zitat von Headi:
Zitat von TStringlist:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...
Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.
Dafür brauchst du die Unit 'DateUtils' in der Uses-Klausel.
Ok das habe ich jetzt gemacht, nur funktioniert es immer noch nicht.
Also habe ich recodemillisecond auch mal beim DateTimePicker angewandt aber ging immer noch nicht


Zitat von marabu:
Wenn ein Vergleich nicht so funktioniert, wie du es erwartest, dann schaue dir die Werte mal an, welche du miteinander vergleichen willst.

ShowMessage(DateTimeToStr(DateTimePicker.Time)); marabu
Du wirst es nicht glauben, aber das habe ich schon X Mal gemacht, denn nur so konnte ich den code zusammenbasteln.
Das komische ist das beim testprogramm alles ging mit meinem code, nur immer wenn ich den Code in mein eigentliches Programm einbaue geht er nicht mehr

was mache ich nur falsch?

greez headi
Pascal
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Zeiten vergleichen

  Alt 2. Mai 2006, 08:15
Zitat von Headi:
Zitat von TStringlist:
Zitat von Headi:
Zitat von TStringlist:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...
Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.
Dafür brauchst du die Unit 'DateUtils' in der Uses-Klausel.
Ok das habe ich jetzt gemacht, nur funktioniert es immer noch nicht.
Also habe ich recodemillisecond auch mal beim DateTimePicker angewandt aber ging immer noch nicht
Hm, bei meinem kurzen Check klappte das aber. Ich nehme daher an, Du wirst DateTimePicker1.Time vorher nicht mit einer extra für deinen Test auch brauchbaren Uhrzeit geladen haben (siehe 'Time' im OI). Ansonsten, wenn man diese 'Time'-Property vorher im OI eingegeben hat oder das nachher per Maus tut (bei 'Kind' = dtkTime), dann sind in diesem Time-Anteil nämlich keine Millisekunden enthalten, ergo müsste das auch funktionieren.

Wenn du 'Time' (für den Test) allerdings selbst wieder von NOW ableitest (z.B. im Click-Eventhandler eines Buttons):

  DateTimePicker1.Time := frac(RecodeMillisecond(NOW, 0) + 5*oneSecond); dann ist dafür natürlich auch wieder die RecodeMillisecond-Funktion nötig.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz