Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi - time

Zdravím
Proč to nefunguje

begin
   time1 := time;
   time2 := StrToTime('09:45:00');
   Label1.Caption:= TimeToStr(time1);
   Label2.Caption:= TimeToStr(time2);
   If time1 = time2 Then  ShowMessage('shoda')
end;
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak je 10:34:00 time2 := StrToTime('10:40:00'); V 10:40:00 by mněl vyskočit ShowMessage('shoda')
m12 25.11.2016 10:36
m12
Čas obsahuje i milisekundy. Trefíš se přesně do milisekundy?
Jan Fiala 25.11.2016 10:46
Jan Fiala
Tak proč mi delphi neukaže celý čas i s těma milisekundami ve watches? timer.png Moc v tom neumí. M…
m12 25.11.2016 10:55
m12
Nechces radeji napsat, co chces dosahnout? Pokud to ma byt budik, staci, kdyz budes testovat zda Zad…
Jan Fiala 25.11.2016 11:11
Jan Fiala
Ono to poběží na lazarusu - linux - raspberý Pokud se shoduje, zapní pin. Jinak jako alternativni…
m12 25.11.2016 12:01
m12
Ono by mnělo stačit nastavít timer na 1000, což je jedna vteřina, ne? A jak zajistíš, aby timer zač…
Jan Fiala 25.11.2016 13:18
Jan Fiala
Jednodussi cesta je pouziti funkce: RecodeMilliSecond(const AValue: TDateTime; const AMilliSecond: W… poslední
Jan Fiala 25.11.2016 14:36
Jan Fiala

Nechces radeji napsat, co chces dosahnout?
Pokud to ma byt budik, staci, kdyz budes testovat zda Zadany_cas >= Time();
Po kladnem otestovani pak nastavis promennou, ze udalost probehla.
Jinak jako alternativni postup samozrejme muzes oriznout ms z aktuálního času pred testováním, ale pak se časy budou shodovat celou sekundu a ty zase musíš řešit to, že tebou požadovaná událost již proběhla.
Nebo můžeš testovat, zda aktuální čas je mezi zadaným časem a zadaným časem + 999ms

A že ti to ve Watch neukáže? Jaký formát sis při zobrazení dal? Pokud řetězec, tak to převede pomocí formátu. Zkus tam dát třeba desetinné číslo

Ono to poběží na lazarusu - linux - raspberý

Pokud se shoduje, zapní pin.

Jinak jako alternativni postup samozrejme muzes oriznout ms z aktuálního času pred testováním, ale pak se časy budou shodovat celou sekundu a ty zase musíš řešit to, že tebou požadovaná událost již proběhla.

Toto bych rad.
Jak to ořiznout?
Ono by mnělo stačit nastavít timer na 1000, což je jedna vteřina, ne?

Ono by mnělo stačit nastavít timer na 1000, což je jedna vteřina, ne?

A jak zajistíš, aby timer začal přesně s nulovymi ms?
Proč teda jednoduše neotestuješ, jestli není aktuální čas v rozsahu 10:16:00 - 10:16:00.999 ?

begin
   time1 := time;
   time2 := StrToTime('10:16:00');
   time3 := StrToTime('10:16:00.999');
   Label1.Caption:= TimeToStr(time1);
   Label2.Caption:= TimeToStr(time2);
   If (time1 => time2) and (time1 <= time3) Then  ShowMessage('shoda');
end;

Na oriznuti muzes pouzit napr. funkce DecodeTime / EncodeTime

Jednodussi cesta je pouziti funkce:
RecodeMilliSecond(const AValue: TDateTime; const AMilliSecond: Word)
Pomoci ni vynulujes ms v aktualnim case a muzes porovnavat.

begin
   time1 := RecodeMilliSecond(Time, 0);
   time2 := StrToTime('10:16:00');
   Label1.Caption:= TimeToStr(time1);
   Label2.Caption:= TimeToStr(time2);
   If time1 => time2 Then  ShowMessage('shoda');
end;

Zpět do poradny Odpovědět na původní otázku Nahoru