Zeit vergleichen
-
Sorry, MinuteSpan() wäre die richtige Funktion...
-
Hi,
lass dir doch mal StrToTime(zeit1) ausgeben und vergleiche es mit dem Time() - Format
mfg, Micha!
-
Danke für schnelle Antworten,
Ausgabe von StrToTime(zeit1) sieht korrekt aus!
Ach ja ich hab das geschribene in einem Timer mit Interval auf 1 (1 Millisekunde)eingestellt.
Werde gleich mit MinuteSpan() probieren.
-
Hallo,
die Methode MinuteSpan() funktioniert auch nicht.
//1. Wenn automatische Sicherung aktiviert ist if(aSicherung == 1) { //Wenn eingestellte Zeit mit aktuelle übereinstimmt if(MinuteSpan(StrToTime(zeit1), Time()) == 0) sicherung(); //Sicherung durchfuehren }Was kan man noch machen?
-
In welchem Zeitintervall prüfst du denn, ob die Sicherung gemacht werden soll?
Evtl. sind deine Prüfzeiten zu grob, oder die Auflösung deiner Zeit in der Ini Datei ist zu fein.MinuteSpan ist wahrscheinlich auch nicht ganz korrekt für deinen Fall:
Im Unterschied zur Funktion MinutesBetween, die nur ganze Minuten berücksichtigt, meldet MinuteSpan nicht vollständig verstrichene Minuten gegebenenfalls als Bruch
Das ist nicht das, was du willst. Was passiert überhaupt, wenn du nicht ganz genau (also ganz ganz genau) diesen Zeitpunkt triffst, der in der *.ini Datei steht?
Ein Vergleich mit > (oder auf ein 'nachher' )ist bestimmter sinnvoller als ein Test auf absolute Gleichheit
-
du bist dir sicher, dass du die TDateTime-Werte bis zur letzten Stelle gleich haben willst? TDateTime ist eigentlich ein Double-wert
Bsp: Time() = 0.658566689814815
StrToTime("15:46:00,0") = 0.656944444444444wie oft kontrollierts du denn welchen Wert Time() hat?
-
jede 1 Millisekunde.
Da ich nicht auf sekunden genau sein muss habe ich den Interval auf 1000 (1 sek) gesetzt und trotzdem kein Erfolg der überspringt die Zeit und passiert gaar nichts.
-
Soweit ich das verstanden habe, muß es auf die Minute genau sein, also setz das Interval auf 60000. Alles andere ist Ressourcen-Verschwendung!
Zeig mal Deinen aktuellen Quelltext.Ich hatte übrigens mal ein ähnliches Problem und habe es folgenderweise gelöst:
ein WORD, das Hi-Byte die Stunde, das Lo-Byte die Minute. Läßt sich absolut einfach vergleichen und man kann sogar die Werte halbwegs verstehen (im Gegensatz zu 0.86333172, wer kann das schon im Kopf ausrechnen).Gruß,
Christian
-
Hi,
ich hab das Beispiel gerade mal wieder rausgekramt. War doch ein bißchen anders als oben beschrieben (kein WORD), aber ähnlich:GetLocalTime(&time); nDay = time.wDayOfWeek - 1; if(nDay < 0) nDay += 7; nTime = time.wHour * 60 + time.wMinute; // Der für Dich interessante Teil ... // Abfrage per SQL ... qry->SQL->Add("SELECT * FROM tbl_timers WHERE Timer_Day="+String(nDay)); qry->SQL->Add("AND Timer_Time="+String(nTime)); // ... das kannst Du natürlich gerne auch anders machen: if(zeit1 == nTime) // Falls zeit1 das gleiche Format benutzt ;) HauDenLukas();Gruß,
ChristianPS: überprüft habe ich per Timer, jedesmal 3 Sekunden nach dem Minutenwechsel (damit auch ja nichts verschütt geht):
// Nächster TiCheckTimer erst um 3 Sekunden nach dem nächsten // Minutenwechsel!!! GetLocalTime(&time); TiCheckTimer->Interval = (63 - time.wSecond) * 1000;
-
Ich hab das grade etwas anders gelöst und zwar die Differnz von Double Wert in Integeren konvertiert und mit 0 verglichen , und endlich Funktioniert es.
Mein Code:
//1. Wenn automatische Sicherung aktiviert ist if(aSicherung == 1) { if(tage == 0) { //Wenn eingestellte Zeit mit aktuelle übereinstimmt if( int(MinuteSpan(StrToTime(zeit1), Time())) == 0) sicherung(); //Sicherung durchfuehren } }