AGB  ·  Datenschutz  ·  Impressum  







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

Seltsames verhalten von TDateTime mit if

Offene Frage von "Mariaki"
Ein Thema von Mariaki · begonnen am 21. Nov 2009 · letzter Beitrag vom 21. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mariaki
Mariaki

Registriert seit: 21. Sep 2008
64 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 18:37
Hi,
ich möchte eine kleine Weckfunktion in mein Prog einbauen.
Da dachte ich mir nehmen ich die DateTimerPicker-Komponente.
Also schrieb ich mir:
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  if DT.DateTime=Time then
    showmessage('Test');
end;
DT ist der Picker.
Dies funkionier leider nicht.. er macht einfach nichts zur angegebnen Zeit.
Nun dachte ich das man das nicht direckt machen kann, also packte ich die angeben der Weckzeit und der aktuellen zeit in eigene Variablen... Funltioniert auch nicht.
Nun hab ich zu der Zeit in der ich mit Delphi angefangen hab schonmal nen Wecker gemacht (mit Turbo Delphi, in dem es keinen DateTimePicker gibt). Ich machte das also über einen TEdit.
Da kam mir die Idee das ganze nicht in TDateTime Variablen zu packen sondern in String:
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  if DateTimeToStr(DT.DateTime)=DateTimeToStr(Time) then
    showmessage('Test');
end;
Und siehe da.. es funktioniert!!!!
Nun Frag ich mich wiso das so geht, aber nicht direckt???


P.S.: Ist eine Reine Wissens-Frage... Ich werd es jetzt so machen.
Benedikt
Warum merken die ganzen Christen eigentlich nicht, dass Gott veraltet ist. Zur Zeit von Jesus war er ein gutes Medium um Moral zu verbreiten.. aber Heute?!?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 18:47
Naja, ein DateTime Wer ist ein double und als solcher schonmal nicht für den vergleich mit = geeignet. Außerdem ist der Tiumer ungenau (hat nur so ca. 20ms Auflösung)

Und der String ist wohl nur aus die Sekunde genau, weshalb der Vergleich klappt
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 18:48
Zwei sachen:
1. Was steht in DT.DateTime und was in Time? Kann das irgendwann überhaupt mal gleich werden?
2. Der Timer ist nicht sehr genau. Es können auch schon mal ein paar Sekunden übersprungen werden, dann trifft deine Bedingung nie zu.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 18:48
Gibt mal ShowMessage(FloatToStr(Time)) aus. Was für einen Wert siehst du?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 18:54
Zitat von toms:
Gibt mal ShowMessage(FloatToStr(Time)) aus. Was für einen Wert siehst du?
Da die Unterschiede auch sehr klein sein können ...
ShowMessage(FloatToStr(DT.DateTime - Time)); hier sieht man den Unterschied und es ist sehr unwahrscheinlich,
daß hier mal genau 0 rauskommt. (aus oben schon genannten Gründen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Mariaki
Mariaki

Registriert seit: 21. Sep 2008
64 Beiträge
 
RAD-Studio 2010 Arc
 
#6

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 18:58
@Lukie:
1. DT.DateTime ist wie gesagt der Picker und somit TDateTime und Time ist ne Systemvariable(wenn man das so nennt) und gibt die aktuelle Zeit an.
2. Wenn der timer nen intervall von 1 hat wird keine sekunder übersprungen.

@toms/himitsu:
Hab ioch auch schon ausprobiert.. es kommten die aktuellen zeiten.. das ist ja das was mich verwirrt.. alles passt.. nur bei dem = erkennt er es nicht
Benedikt
Warum merken die ganzen Christen eigentlich nicht, dass Gott veraltet ist. Zur Zeit von Jesus war er ein gutes Medium um Moral zu verbreiten.. aber Heute?!?
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#7

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 19:07
Wenn du TDateTime direkt vergleichst sind da aber noch Millisekunden bei. Dann ist es sehr unwahrscheinlich, dass du Triffst. Und wie schon gesagt eignet sich der Wert nicht für einen Vergleich mit =, benutz < und > dafür. Da gibt es hier auch noch Threads zu, die das im Detail beschreiben.
Es funktioniert, wenn du DateTimeToStr() nimmst, weil der Wert dann nur bis in die Sekunden geht. Dass keine Sekunde übersprungen wird ist übrigens nicht sicher - wenn dein Programm durch äußere Umstände blockiert wird, oder wenn du gerade selbst etwas anderes abarbeitest und die Sekunde deshalb verpasst...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 19:18
Bei = müssen die Werte absolut genau gleich sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 19:19
Zitat von Mariaki:
@Lukie:
1. DT.DateTime ist wie gesagt der Picker und somit TDateTime und Time ist ne Systemvariable(wenn man das so nennt) und gibt die aktuelle Zeit an.
Das ist mir klar. Aber ist dir schon mal der Gedanke gekommen, dass in DT.DateTme das Datum mit drinstreckt und in Time nur die zeit?

Zitat:
2. Wenn der timer nen intervall von 1 hat wird keine sekunder übersprungen.
Wollen wir wetten dass er es tut? Der Timer hat unter Windows NT eine Mindestauflösung von 15 Millisekunden. Des Weiteren haben Timer Nachrichten eine sehr geringe Priorität im System. Ist das System ausgelastet, werden die Timer Nachrichten ganz hinten eingereiht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Seltsames verhalten von TDateTime mit if

  Alt 21. Nov 2009, 20:08
Zitat von Luckie:
Aber ist dir schon mal der Gedanke gekommen, dass in DT.DateTime das Datum mit drinstreckt und in Time nur die zeit?
Warum würde es dann DT.DateTime heißen?

Ein Wecker klingelt übrigens dann, wenn die Zeit abgelaufen ist. Also würde ich sowas mal versuchen:
1.Idee;
Delphi-Quellcode:
If WeckZeit >= AktuellesZeit Then
  Wecken;
Blöd, denn dann klingelt der Wecker ja immer.
Wenn der Wecker aber jeden Tag, aber nur 1x am Tag wecken soll, dann so:
Delphi-Quellcode:
If (WeckZeit >= AktuellesZeit) And HeuteNochNichtGeweckt Then
  Wecken;
Oho. wie würde man das 'Heute noch nicht geweckt' implementieren? In dem man sich beim Wecken merkt, das man heute geweckt hat.
Delphi-Quellcode:
If (WeckZeit >= AktuellesZeit) And (WeckTag<HeutigerTag) Then Begin
  WeckTag := HeutigerTag;
  Wecken;
End;
Und schon hat man einen Wecker, der auch dann weckt, wenn man den Wecker zu spät gestartet hat.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 07:33 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