Figer l'heure afin de l'utiliser comme parametre de calcul

Résolu
Signaler
Messages postés
4
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
23 mars 2006
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
bonjour,
je voudrais utiliser l'heure du system comme parametre de calcul afin de calculer un volume en temps reel connaissant l'heure du debut et le debit de remplissage d'une citerne par ex.
en utilisant
maskEdit1.Text:= TimeToStr(now); // heure actuelle
comment figer heure actuelle pour effectuer la difference de temps (debut replissage-heure actuelle) a n' importe quel moment???
Merci

5 réponses

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
tu peu meme avoir le temps en millisecondes, ce qui est plus precis :

var TMS : Cardinal;
TEL,Sigma : Single;
begin
TMS := GetTickCount;

... methode ... Sigma := ???

TMS := GetTickCount - TMS;
TEL := (Sigma/TMS)*1000; {N/Sec}

label1.caption := format('Rate : %.2f U/Sec (%.2f/%d sec)',[TEL,Sigma,TMS div 1000]);
end;

et pour transformer ces MilliSecondes en Temps (TDateTime) :

function MsToTime(const Ms : cardinal) : TDateTime;
begin
Result := EncodeTime( Ms div 3600000, (Ms div 60000) mod 60,
(Ms div 1000) mod 60, Ms mod 1000);

end;

<hr size="2" width="100%">
Messages postés
4
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
23 mars 2006

merci d'y avoir repondu j'apprecie ce geste, je trouve la reponse de foxi est tres complete sauf que je suis novice et je ne veux precipiter les choses et m'enfoncer encore plus j'ai utilise la methode la plus elementaire que voici,

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=true;
maskedit2.Text:=timetostr(now);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin


timer1.Enabled :=false; // afin de stoper l'horloge
label1.Caption:=floattostr(strtotime(maskedit2.text)-strtotime(maskedit1.text));
et ça marche!eureka!!Sauf qu'a l'oppose de fOxi je dois convertir le format time H:M:S en decimales (minutes) et la je suis plante.
merci encore.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
je suis d'accord, les convertions sont assé complexe a comprendre mais si simple a la fois.

GetTickCount renvois des millisecondes.

pour transformer ces millisecondes en temps HMSZ il faut connaitre ce principe tout simple :

Seconde = MS / 1000 (1000 ms/sec)
Minutes = MS / 1000 / 60 (1000ms/sec et 60 sec/min)
Heures = Ms / 1000 / 60 / 60 (1000ms/sec et 60sec/min et 60min/heure)

c'est simple non ?

en tout cas c'est ce qu'il y a de plus precis.

maintenant les types :

GetTickCount renvois un entier non signé 32 bits (cardinal / LongWord)
Time, Now renvois un Double (TDateTime) un flottant donc.

pour obtenir H,M,S et Z par rapport a un Time ou Now il suffit d'utiliser DecodeTime de l'unité sysutils et inversement obtenir un TDateTime par rapport a HMSZ on utiliseras EncodeTime de la meme unité.

<hr size="2" width="100%">
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,,

memorise ton heure de début:

debut,DeltaT::TDateTime;

debut:=now;

pour la difference:

DeltaT:=now-debut;



@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
passer par les convertion en chaine n'est très judicieux il vaut miux utilser directemnt les routines de gestion de datetime

var debut:Tdatetime;

procedure TForm1.departClick(Sender: TObject);

begin

timer1.Enabled:= true; //on demarre le chrono

debut: =now;// on memorise le début

label2.Caption:= timetostr(0); //on met le chrono à 0



end;



procedure TForm1.Arret2Click(Sender: TObject);

var DeltaT:Tdatetime;

begin

deltaT: = now-debut;// on calcule le temps ecoule

label1.Caption:= timetostr(DeltaT);

timer1.Enabled:=false; //on arrete le chrono



end;



procedure TForm1.Timer1Timer(Sender: TObject);

var DeltaT:Tdatetime;

begin

deltaT: = now-debut;//on calcule le temps ecoulé

label2.Caption:=timetostr(DeltaT);//on affiche le chrono





end;



@+

jlen