Détermination de la différence entre deux heures

Signaler
Messages postés
195
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
26 février 2020
-
denisbertin
Messages postés
195
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
26 février 2020
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/102715-determination-de-la-difference-entre-deux-heures

denisbertin
Messages postés
195
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
26 février 2020
1
Pour se replacer dans le contexte d'élaboration de cette fonction, mon logiciel affiche et égrène les heures, minute, seconde de chaque action d'un "utilisateur" pour un jour donné, ces heures apparaissent donc dans l'ordre croissant. T1 seras toujours inférieur à T2 sauf si l'on change de jours à minuit. D’où le fait d'ajouter à T2 24 heures, sinon j’apprécie vos commentaires il sont justifiées.
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
Mille excuses, Cirec, ton approche est la seule correcte.

Le problème à résoudre est mal posé. Le résultat d'une fonction qui retourne la
différence entre deux heures dont le jour est indéterminé n'a pas de sens.

Dans la logique d'une différence entre deux heures du même jour, si l'on veut pouvoir passer les heures à comparer dans un ordre indifférent, on peut faire :

// uses Math
function DiffTime2(H1, H2: string): string;
begin
  Result := TimeToStr(Max(StrToTime(H1), StrToTime(H2)) - Min(StrToTime(H1), StrToTime(H2)));
end;


Cordialement.
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
Dit encore autrement : remaining time1 + elapsed time2 ^^
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
Salut,

Tu m'as grillé sur ce coup, Cirec !

J'étais en train de tester le code de notre ami, et voici le fruit de ma réflexion :

Il y a un gros bug si la valeur des minutes de bpc est inférieures à celle des minutes de apc. Par exemple si apc = '05:18:06' et bpc = '05:17:03'.

Je n'ai pas compris l'utilité de passer des PChar en paramètres...

Voici un code efficace malgré sa simplicité :

function DiffTime(H1, H2: string): string;
begin
  Result := TimeToStr(StrToTime(H2) + (24 - StrToTime(H1)));
end;


Car attention à la subtilité : pour avoir l'écart entre les 2 Time, , il faut additionner la durée restant à effectuer jusqu'à minuit par Time1+ le temps déjà effectué par Time2, sinon le calcul sera faux dès que la valeur de Time2 est inférieure à celle de Time 1.

Bref, dit différemment, il ne suffit pas de faire la différence entre le temps de plus grande valeur moins le temps de moindre valeur.

Cordialement.
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
Bonjour,

pourquoi ne pas faire tout simplement:
const
  T1 = '18:52:24';
  T2 = '05:18:58';
begin
  Caption := TimeToStr(StrToTime(T1)-StrToTime(T2))
end;

fonctionne tout aussi bien à l'inverse:
const
  T1 = '18:52:24';
  T2 = '05:18:58';
begin
  Caption := TimeToStr(StrToTime(T2)-StrToTime(T1))
end;


Cordialement,

@+