Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - SecondsBetween + Zeitdifferenz berechnen funktioniert nicht


sunshineh - Di 28.10.08 10:32
Titel: SecondsBetween + Zeitdifferenz berechnen funktioniert nicht
Hallo,
warum funktioniert das nicht?!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
temp, temptime : string;
begin
//...temp auslesen -> in temptime steht z.B. 09:27:15
  temptime := FormatDateTime('hh:mm:ss', StrtoTime(temp));
  XMLEinstellTimer.Interval := SecondsBetween(Now,StrtoTime(temptime))*1000;


Delete - Di 28.10.08 10:40

Das Datum wird immer noch nicht berücksichtigt. In welchem Forum [http://www.delphipraxis.net/topic145165,0,asc,0.html] soll es denn nun weitergehen?


sunshineh - Di 28.10.08 10:49

Das Datum ist mir eigentlich egal.
Ich möchte nur, dass der Timer zu der Uhrzeit, die ich in temp gespeichert habe, startet.
wenn ich nun um 9:49Uhr in Temp 13:00 drin stehen hab, soll die OnTimer-Fkt heute um 13:00 starten, wenn ich in Temp 8:00 drin stehen hab, dann also morgen früh um 8:00.


Delete - Di 28.10.08 10:52

Und woher soll der Timer wissen, ob heute, morgen oder nächste Woche, wenn Du kein Datum angibst?


sunshineh - Di 28.10.08 10:56

Wie kann ich dann sagen, dass er als Datum das heutige nimmt bzw. kann ich Now auch ohne Datum verwenden?


Delete - Di 28.10.08 11:00

Heute 00:00:00 ergibt sich aus trunc(Date). Da dann noch Frac(StrToTime(temptime)) dazu und es sollte passen.


sunshineh - Di 28.10.08 11:14

Ich hätte es nun so gemacht:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  temptime := StrtoTime(FormatDateTime('hh:mm:ss', temp));
  temptimenow := StrtoTime(FormatDateTime('hh:mm:ss', now));
  if temptime < temptimenow then
       XMLEinstellTimer.Interval := ((24*60*60)- SecondsBetween(temptimenow,temptime))*1000
  else
  XMLEinstellTimer.Interval := (SecondsBetween(temptimenow,temptime))*1000;


Delete - Di 28.10.08 11:18

Nochmal zum Verständnis: TDateTime ist eine double. Der Vorkommaanteil bestimmt das Datum und der Nachkommaanteil die Uhrzeit. Ich würde nun die aktuelle Uhrzeit (und nur diese) ermitteln und mit temp vergleichen. Wenn temp > jetzt ist, ergibt sich temptime wie oben beschrieben (Datum von heute), ansonsten 1 addieren (enstspricht morgen).


nahpets - Di 28.10.08 11:20

Du darfst von Now nur den Nachkommaanteil nehmen.


Delphi-Quelltext
1:
XMLEinstellTimer.Interval := (SecondsBetween(now - trunc(now),temptime))*1000;                    


Delete - Di 28.10.08 11:23

Zitat:

Delphi-Quelltext
1:
now - trunc(now)                    
Oder mit Frac ;)


nahpets - Di 28.10.08 11:49

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:

Delphi-Quelltext
1:
now - trunc(now)                    
Oder mit Frac ;)

Ja, hast recht, fiel mir nur gerade nicht ein :-(