Somme d'heures..

Bonjour,
Comment ecrire 35:00 (35h…)
Et en faire des additions
35:30 + 35:45 = 71:15 (par exemple…)

Je pense qu’il y a forcement une solution plus simple que celle que j’utilise…
(Je separe mes heures uniquement puis mes minutes le tout en “cdbl”
Puis j’affiche en text mon resultat en passant par des formule pour convertir mon resultat en centieme en heure… Une galere, quoi…

Merci d’avance bcp!!

J’aurais transform les heures enminutes, ajout toutes les minutes
divis les minutes par 60 (MOD et / je crois) et obtenu le total en jeures et en minutes.

Pourquoi ne pas convertir en minutes, additionner, puis convertir nouveau en heures en divisant par soixante, et le reste sera les minutes.

Oh ! Quelle bonne ide

ou transformer en heures dcimales, ce qui revient au mme .
c’est plus simple apprhender en minutes finalement.

On peut faire une mthode encore plus gnrale en descendant la seconde. Mais en l’occurrence, vu le chiffre de 35 heures, je souponne que cela sera appliqu des calculs de paie, o les secondes ne sont pas utilises.

oui et dans ce cas les heures decimales sont une bonne ide, car le calcul aprs se fait sur ces heures justement …

Si c’est quelque chose qui n’arrive qu’ un seul endroit dans le code, la solution de convertir d’abord en minutes, d’additionner puis de reconvertir en Heure et Minutes avec une division entire ’ \’ et Mod() reste la meilleure solution dans la mesure o cela permet de s’affranchir des problmes de prcision des nombres dcimaux surtout quand on aborde des centaines de sommes conscutives.

Mais si ce genre de calcul est plutt frquent dans le code, mon avis il est plus rentable de crer une classe pour grer ce calcul en un seul et unique endroit du code, avec un constructeur qui prend une chane du genre “35:30” comme paramtre et qui gre la validation par la leve d’une exception ainsi que la transformation en minutes dans une proprit .Minutes As Integer, une mthode .toText As Text pour pouvoir rcrire cette valeur l’cran ou vers l’imprimante. Ensuite, une mthode .Operator_Add() pour grer les additions.

Au premier abord cela peut paratre compliqu, mais cette approche fait gagner un temps fou une fois mise en place. De plus, si on a besoin des grer des multiplications, des soustractions, des divisions ou mme des comparaisons, on a juste rajouter des mthodes de surcharge d’oprateurs .Operator_xxx().

ca me parait inutilement compliqu…
faire une methode qui converti les heures en heures decimales 3h30min devient 3,5 heure (float)
aprs tous les calculs se font en float
et une autre methode pour le sens inverse.
quoi que si c’est pour une paye, on ne fait pas le calcul en sens inverse.

Indiscutablement, au moins une mthode, pour viter les doublons de code, semble ncessaire.

Les heures dcimales, je vois bien comment aller de base 12 base 10, mais dans l’autre sens avec un single, je crains les effets de bord. Peut tre inutilement, mais j’aime bien en rester Integer pour heures et minutes.

Si effectivement les heures dcimales sont utilises pour les calculs de paie, j’aurais tendance faire la conversion au dernier moment.

[quote=330417:@Jean-Yves Pochez]ca me parait inutilement compliqué…
faire une methode qui converti les heures en heures decimales 3h30min devient 3,5 heure (float)
après tous les calculs se font en float
et une autre methode pour le sens inverse.
quoi que si c’est pour une paye, on ne fait pas le calcul en sens inverse.[/quote]

C’est effectivement compliqué s’il s’agit juste d’additionner des temps de travail. Toutefois, je resterais dans le domaine des Integers comme le conseille Michel ci-dessus.

Ayant déjà été confronté à ce genre de problème justement pour traiter des additions de temps de travail journalier, j’ai utilisé une classe afin de simplifier la gestion des heures supplémentaires qui étaient détectées, et séparées dans le constructeur de la classe et additionnées parallèlement dans la méthode surchargeant l’opérateur d’addition. D’autre part, le constructeur détectait les erreurs de saisie manuelle du genre “08h70” ou encore “18H20” qui est manifestement erroné pour une journée de travail.

J’ai dj travaill 33 heures de suite lors de la mise en service d’un systme. Si votre programme m’avait interdit de saisir mes heures, cela aurait t l’insulte s’ajoutant l’injure. Je vous confirme qu’aprs 33 heures, je suis d’assez mauvais poil et ma raction aurait t assez vive! Il faut tre trs prudent avec les validations automatiques.

Je ne sais pas comment je dois prendre cette réaction… Il y manque peut-être un smiley ? :slight_smile:

Pour information, je me conformais à un cahier des charges. Et le genre d’activité géré par cette appli ne pouvait pas engendrer plus de 12H00 de travail d’affilé.
Pour ce qui est des longues journées de travail, dans une vie antérieure, il m’est arrivé de déclarer 36 cachets journaliers pour une période d’un mois à un organisme gérant les congés payés des métiers du spectacles. :wink:

Mais cette histoire est hors-sujet.

oui, il manquait un smiley! pas de souci, c’tait avec un sourire!

A l’ancienne tu peux utiliser le code suivant pour ajouter ne heure
dim d1 as new Date
dim D2 as new date
d2.Second = d1.Second + 3600

Si tu utilises derniere version xojo il te faut utiliser la class dateInterval
va voir: http://developer.xojo.com/xojo-core-dateinterval

Ou plus simplement

d.hour = d.hour+1