Discussion:
Uhrzeit vergleichen
(zu alt für eine Antwort)
Jeff Martinski
2004-09-30 13:42:27 UTC
Permalink
Hallo NG,

folgendes Problem:
Ich möchte 2 Uhrzeiten minutengenau zu vergleichen .

dh ich möchte eine Aktion zu einem festgelegten Zeitpunkt
auslösen. Die Zeit lege ich mittels TMaskEdit fest
(Zeit, kurz, also ohne Sekunden)
wenn ich jetzt aber den Wert von TMaskEdit
mit TimeToStr(Time) vergleiche bekomm ich das Problem
daß der eine Wert im Format HH:MM vorliegt (wie gewünscht)
aber TimeToStr(Time) einen Wert im Format HH:MM:SS
-also mit sekundenanteil- zurückliefert.

Wie bekomm ichs also hin das TimeToStr(Time)
die aktuelle Zeit ohne den Sekundenanteil zurückliefert ?

im Prinzip bräuchte ich eine Funktion die mir von dem Rückgabewert
von TimeToStr(Time) die letzten 3 Zeichen wegschneidet ( :ss ) ,
oder geht das doch noch einfacher ?

danke für eure Hilfe

gruß Jeff
Alfred Gemsa
2004-09-30 12:53:27 UTC
Permalink
Post by Jeff Martinski
im Prinzip bräuchte ich eine Funktion die mir von dem Rückgabewert
von TimeToStr(Time) die letzten 3 Zeichen wegschneidet ( :ss ) ,
if MaskEdit1.Text=copy(TimeToStr(now),1,5) then ...

Siehe OH zu copy.

Alfred
Jeff Martinski
2004-09-30 14:15:51 UTC
Permalink
Vielen Dank Alfred,

genau das wars.
Post by Alfred Gemsa
Post by Jeff Martinski
im Prinzip bräuchte ich eine Funktion die mir von dem Rückgabewert
von TimeToStr(Time) die letzten 3 Zeichen wegschneidet ( :ss ) ,
if MaskEdit1.Text=copy(TimeToStr(now),1,5) then ...
Siehe OH zu copy.
Alfred
Thomas Söhne
2004-09-30 12:57:47 UTC
Permalink
Hallo Jeff,
Post by Jeff Martinski
Hallo NG,
Ich möchte 2 Uhrzeiten minutengenau zu vergleichen .
dh ich möchte eine Aktion zu einem festgelegten Zeitpunkt
auslösen. Die Zeit lege ich mittels TMaskEdit fest
(Zeit, kurz, also ohne Sekunden)
wenn ich jetzt aber den Wert von TMaskEdit
mit TimeToStr(Time) vergleiche bekomm ich das Problem
daß der eine Wert im Format HH:MM vorliegt (wie gewünscht)
aber TimeToStr(Time) einen Wert im Format HH:MM:SS
-also mit sekundenanteil- zurückliefert.
Du könntest aber auch mit StrToDateTime, eine Zeit aus dem String
machen, dann Time - vonStrZeit berechnen, dann DecodeDateTime benutzen
und wenn h=0 und m=0 dann ist die Zeit gleich.
Post by Jeff Martinski
Wie bekomm ichs also hin das TimeToStr(Time)
die aktuelle Zeit ohne den Sekundenanteil zurückliefert ?
im Prinzip bräuchte ich eine Funktion die mir von dem Rückgabewert
von TimeToStr(Time) die letzten 3 Zeichen wegschneidet ( :ss ) ,
oder geht das doch noch einfacher ?
Dann würdest du ja nur Strings vergleichen.

Schau mal unter EncodeDateTime und DecodeDateTime nach, damit kannst Du
alle Zeitwertbestandteile einzeln bekommen.
Post by Jeff Martinski
danke für eure Hilfe
gruß Jeff
Wenn Du aber unbedingt Strings vergleichen möchtest dann setze
vorher das Zeitformat (hab gerade nicht die Bezeichnung vielleicht
ShortTimeFormat ? )
auf den Wert, den du möchtest (z.B. 'hh:nn').

Grüße,
Thomas
Marian Aldenhövel
2004-09-30 13:12:52 UTC
Permalink
Hi,
Post by Jeff Martinski
Wie bekomm ichs also hin das TimeToStr(Time)
die aktuelle Zeit ohne den Sekundenanteil zurückliefert?
Du verwendest FormatDateTime('hh:mm',Time).
Post by Jeff Martinski
Ich möchte 2 Uhrzeiten minutengenau zu vergleichen .
Vergleiche Uhrzeiten und nicht Strings. Dann kannst Du auch so Dinge
implementieren wie verspätetes Ausführen falls Dein Programm mal gerade
zur richtigen Minute keine Gelegenheit hatte.

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn.
Fon +49 228 624013, Fax +49 228 624031.
http://www.marian-aldenhoevel.de
"When firing areas are active all air traffic is strongly
requested to avoid them"
Daniel Voelkel
2004-09-30 13:15:13 UTC
Permalink
Hallo,
Post by Jeff Martinski
im Prinzip bräuchte ich eine Funktion die mir von dem Rückgabewert
von TimeToStr(Time) die letzten 3 Zeichen wegschneidet ( :ss ) ,
oder geht das doch noch einfacher ?
Mein Vorschlag wäre, die Zeiten mittels

function SecondsBetween(const ANow, AThen: TDateTime): Int64;

aus der Unit DateUtils direkt zu vergleichen.

Müßte in Deinem Falle dann ungefähr so funktionieren:

... if secondsbetween(StrToDateTime(MaskEdit1.Text),TIME) < 65 ...
oder
... if minutesbetween(StrToDateTime(MaskEdit1.Text),TIME) = 1 ...


Grüße,
Daniel
Holger Schieferdecker
2004-09-30 14:40:14 UTC
Permalink
Jeff Martinski says...
Post by Jeff Martinski
Hallo NG,
Ich möchte 2 Uhrzeiten minutengenau zu vergleichen .
dh ich möchte eine Aktion zu einem festgelegten Zeitpunkt
auslösen. Die Zeit lege ich mittels TMaskEdit fest
(Zeit, kurz, also ohne Sekunden)
wenn ich jetzt aber den Wert von TMaskEdit
mit TimeToStr(Time) vergleiche bekomm ich das Problem
daß der eine Wert im Format HH:MM vorliegt (wie gewünscht)
aber TimeToStr(Time) einen Wert im Format HH:MM:SS
-also mit sekundenanteil- zurückliefert.
Du könntest mittels pos und copy den relevanten Teil rausschneiden, aber
einfacher wäre es etwa so

if StrToTime(SollZeitString)-Time>=0 then do ...

Damit macht es auch nichts, wenn Dein Programm aus unerfindlichen Gründen
mal eine Minute zu spät die Zeit vergleicht.

Gruß
Holger
--
Of all the things I've ever lost, I miss my mind the most.
Marian Aldenhövel
2004-09-30 15:04:24 UTC
Permalink
Hallo,
Post by Holger Schieferdecker
Damit macht es auch nichts, wenn Dein Programm aus unerfindlichen Gründen
mal eine Minute zu spät die Zeit vergleicht.
Außer der Kleinigkeit, daß die Aktion jetzt statt einmal am Tag jede
Minute (oder was auch immer das Sample-Intervall ist) _ab_ der
angebenenen Minute bis 23:59 ausgeführt wird.

Man braucht also auch noch Merker, ob man das an dem Tag schonmal
gemacht hat, ob man es auch später machen darf, und wenn ja wie viel
später (Das Backup hätte um 22:00 starten sollen, da waren aber alle
Maschinen tot. Erst am nächsten Tag um 21:00 laufen sie wieder. Jetzt
das Backup nachzuholen wäre Unsinn).

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn.
Fon +49 228 624013, Fax +49 228 624031.
http://www.marian-aldenhoevel.de
"When firing areas are active all air traffic is strongly
requested to avoid them"
Jeff Martinski
2004-10-01 12:09:17 UTC
Permalink
Vielen Dank für eure Antworten
Post by Holger Schieferdecker
if StrToTime(SollZeitString)-Time>=0 then do ...
erscheint mir am bei meinem Problem am passendsten.
zumal es auch berücksichtigt daß das Programm mal hängen könnte...

Gruß Jeff

Loading...