[C] - Déterminer la durée entre 2 valeurs horaires
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

[C] - Déterminer la durée entre 2 valeurs horaires



  1. #1
    invite3c35244f

    [C] - Déterminer la durée entre 2 valeurs horaires


    ------

    Bonjour à tous...

    Le titre n'est pas très clair, c'est vrai...

    Voila ce que j'ai:
    J'ai un PIC qui fonctionne avec une RTC (DS1306) en laision SPI, je viens lire cette heure lorsque j'en ai besoin.
    Dans un de mes cas:
    1 -> je lance un test sur mon système, et à ce moment là je viens lire l'heure (Heure de départ)...
    2 -> le test se déroule...
    3 -> il s'arrête automatiquement et là je viens lire l'heure (Heure de Fin)

    Et mon but est de déterminer la durée du test, en gros, c'est:
    Durée = Heure de Fin - Heure de Départ

    Avez vous connaissance d'une routine écrite en C pour réaliser ce genre fonction? Car je me prend la tête sur ça depuis un peu de temps, et je galère...

    Merci d'avance...

    -----

  2. #2
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Salut,

    Et c´est quoi ton problème plus précisément? (format de l´heure?)
    parce que si tu n´arrives pas à faire une soustraction

  3. #3
    invite3c35244f

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Ah!!! Je l'attendais ça!!

    En fait, mon format c'est:
    Jour/Mois/Année - Heure:Min

    Quand ça reste dans la même heure, pas de problème, là je suis d'accord, soustraction, par contre, lorsqu'il y a un passage d'une heure d'un jour, d'un mois, ou d'une année, exemple:

    Heure de départ : 25/12/10 - 6:40
    Heure de Fin : 02/01/11 - 5:15

    C'est tout de suite plus compliqué , non... pour codé ça en C?
    A moins que je cherche 12h a 14h.. ..

  4. #4
    Murayama

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Bonjour!

    C'est le genre de chose qu'on faisait à l'école primaire, si je
    me souviens bien. Calculer les deux instants en secondes,
    faire la différence, puis convertir cette différence en années /
    mois / jours / heures / minutes / secondes.

    C'est pas beaucoup plus dur que de faire une soustraction.

    Je suppose que vous l'attendiez aussi, cette réponse?
    En gros vous voulez qu'on vous donne le code qui compile
    directement sur PIC xxx, c'est ça?

    Pascal

    Citation Envoyé par jorg1n Voir le message
    Ah!!! Je l'attendais ça!!

    En fait, mon format c'est:
    Jour/Mois/Année - Heure:Min

    Quand ça reste dans la même heure, pas de problème, là je suis d'accord, soustraction, par contre, lorsqu'il y a un passage d'une heure d'un jour, d'un mois, ou d'une année, exemple:

    Heure de départ : 25/12/10 - 6:40
    Heure de Fin : 02/01/11 - 5:15

    C'est tout de suite plus compliqué , non... pour codé ça en C?
    A moins que je cherche 12h a 14h.. ..

  5. A voir en vidéo sur Futura
  6. #5
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Et si tu ramenais tout à la même unité?
    Ca ce ferait aussi avec plusieurs tests par exemple pour les jours et heures (en supposant un codage sur 24h):

    if (stop_day != start_day)
    {
    if (stop_hour > start_hour)
    {
    nb_day = stop_day-start_day;
    nb_hour = stop_hour-start_hour;
    }
    else
    {
    nb_day = stop_day-start_day;
    nb_hour = 24 - (start_hour-stop_hour);
    }
    }

    Mais AMA c´est plus long... c´est plus rapide de tout ramener en secondes et de faire une soustraction...

    PS: J´ai l´impression que tu cherches un peu toujours des routines toutes faites, la programmation c´est de la réflexion pas du copier/coller...

  7. #6
    invite3c35244f

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Bonjour Murayama,

    En gros vous voulez qu'on vous donne le code qui compile
    directement sur PIC xxx, c'est ça?
    C'est un peu ça... je voudrais savoir si il existe des routines en C ou language similaire, ou grafcet de principe, afin de déterminer la durée...

    Mais AMA c´est plus long... c´est plus rapide de tout ramener en secondes et de faire une soustraction...
    C'est ceux a quoi je pensai après mon premier post... surtout que je souhaite afficher le résultat en Minutes...
    Alors tout convertir en Minutes, faire la soustraction et hop le tour est joué... je vais essayé...

    Merci pour les conseils

    PS:
    PS: J´ai l´impression que tu cherches un peu toujours des routines toutes faites, la programmation c´est de la réflexion pas du copier/coller...
    Pas toujours.... mais parfois, au lieu de chercher à ceux creuser la tête pendant un certains temps... pourquoi ne pas demander? surtout que c'est une chose qui a déjà été par d'autres personnes j'imagine...

  8. #7
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    petit oubli (j´avai validé le post inintentionnelement au début, je l´ai donc écrit un peu vite):

    Code:
    if (stop_day != start_day)
    {
        if (stop_hour > start_hour)
        {
            nb_day = stop_day-start_day;
            nb_hour = stop_hour-start_hour;
        }
        else
        {
             nb_day = stop_day-start_day-1;
             nb_hour = 24 - (start_hour-stop_hour);
        }
    }

  9. #8
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Citation Envoyé par jorg1n Voir le message
    Pas toujours.... mais parfois, au lieu de chercher à ceux creuser la tête pendant un certains temps... pourquoi ne pas demander? surtout que c'est une chose qui a déjà été par d'autres personnes j'imagine...
    Bah je trouve que c´est mieux pour toi, ça t´apprends à réfléchir et à être autonome... Je n´ai jamais utilisé de RTC et pourtant en 2min je te fais le code... Je ne dit pas qu´il faut rester enfermé et ne pas regarder de qu´il se fait autour, des fois on ne pense pas à certaines choses, mais AMA c´est toujours mieux de faire sois-même, on apprend plus qu´en copiant une routine écrite par quelqu´un d´autre...

  10. #9
    invite29971eb1

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    D'ailleurs, ta RTC ne te renvoie pas une chaine mais un ensemble de valeurs séparées contenant le jour, l'heure, les minutes etc....

    Tu sembles confondre la donnée brute et la donnée mise en forme par le programme.

    Travaille avec les données source, ça sera plus simple et plus rapide que de refaire la conversion inverse

  11. #10
    invite3c35244f

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Bon, bah...

    je pars sur le principe de tout convertir en minutes, et de soustraire ensuite... et cela tant que les années pour le paramètre "Année" est identique.

    Si il est différent, je vais voir ce que je vais faire, car j'ai peur que cela fasse de trop grande valeur...

    Merci encore pour les conseils...

  12. #11
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Citation Envoyé par jorg1n Voir le message
    Bon, bah...

    je pars sur le principe de tout convertir en minutes, et de soustraire ensuite... et cela tant que les années pour le paramètre "Année" est identique.

    Si il est différent, je vais voir ce que je vais faire, car j'ai peur que cela fasse de trop grande valeur...
    Petit calcul: 60 min * 24 h *365 jours = 525.600
    capacité d´un unsigned long int = 2^32 = 4.294.967.296

    -> Nombre d´années en minutes qui peuvent êtres contenu dans un unsigned long int = 2^32 / 525.600 = 8171, 5 ans...

    Crois tu que ton test durera plus de 8000 ans?
    Tu pourrais même utiliser un long int signé si t´es sur que ça durera moins de 4085 ans

  13. #12
    invite3c35244f

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Bon, j'ai un soucis!!!

    Si j'ai un départ le 28/12/10 à 9H35, et un arrêt le 02/01/11 à 10H55

    Pour le calcul voila ce que je fais :
    Jour(min) = jour * 1440
    Mois(min) = mois * 44640
    Année (min) = année * 525600
    Heure (min) = heure * 60
    Minutes (min) = minute

    Je calcule la donnée de départ en minutes et la donnée d'arrivée en minutes aussi et voila ce que je trouve:
    Pour le départ, j'ai : 5 832 575 min
    Pour l'arrivée , j'ai : 5 829 775 min !!! ça devrait être plus grand que le départ, non? Soit je débloque... sois je suis vraiment con!

    Merci d'avance...

    PS: Je crois que le fait qu'il n'y ai pas a chaque fois 31 jours dans chaque mois, y est pour quelque chose... je suis vraiment con en fait !!!

  14. #13
    sdec25

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Citation Envoyé par jorg1n Voir le message
    PS: Je crois que le fait qu'il n'y ai pas a chaque fois 31 jours dans chaque mois, y est pour quelque chose...
    Effectivement.
    Les calculs sur les dates ne sont pas évidents.
    On doit prendre en compte : le nombre de jours dans le mois et les années bissextiles.
    Le plus propre est de définir une date de référence pour convertir une date absolue en nombre. Il suffira ensuite de faire la différence entre 2 dates pour connaître l'intervalle de temps.

    Ensuite, il faut trouver un moyen de connaître le nombre de jours depuis cette date référence jusqu'au 1er janvier d'une année X.
    Enfin, calculer le nombre de jour du 1er janvier de l'année X à la date voulue de l'année X, en tenant compte du mois (et si l'année est bissextile).
    Il y a déjà des bibliothèques qui font ça sur PC, peut-être que tu peux récupérer les sources et les compiler sur PIC.

  15. #14
    invite3c35244f

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Merci pour l'infos sdec25...
    Je vais donc voir comment faire...

  16. #15
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Re,

    Ton erreur vient de tes calculs: par exemple pour le 28/12/10 il ne faut pas compter heures + 28 jours + 12 mois + 10 ans (ce qui donne l´écart de temps entre le 1er janvier 2000 et le 28 janvier 2011 donc après le 2 janvier 2011) mais heures + 27 jours + 11 mois + 10 ans car le 28eme jour et le 12eme mois ne sont pas entiers! (on commence à 1 pour les mois et les jours et non pas à 0).

    Sinon, pour le nombre de jours par mois et par année, le plus précis est de trouver une base de donnée mais si tu n´as pas besoin d´une précision à la minute prés et/ou si tes tests ont une durée maximum connue, tu dois pouvoir simplifier...
    Sinon, on ne connait pas l´utilisation de ta carte mais si t´as des cycles de libres, tu peux introduire une routine qui compte les jours qui passent au fur et à mesure des tests (AMA le plus simple si tu recherches de la précision et que ton µC a du temps à ne rien faire (ce qui est en général le cas...))

  17. #16
    invite74b5b8f7

    Re : [C] - Déterminer la durée entre 2 valeurs horaires

    Re,

    En relisant ce matin ce que j´ai écrit, je m´aperçois que j´ai dit n´importe quoi, tu fais une soustraction donc que la base de départ soit 0 ou 1 on s´en fiche!

    Ton erreur vient bien du fait qu´il n´y a pas toujours 31 jours dans un mois...

Discussions similaires

  1. Ecarts entre des valeurs
    Par invite1273da75 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 07/02/2009, 20h36
  2. Horloge atomique, comment déterminer la durée du temps ?
    Par invitecbe2274a dans le forum Physique
    Réponses: 22
    Dernier message: 10/09/2008, 22h50
  3. [Projet : testeur de pièces] Valeurs de composants à déterminer
    Par invite1e30bf37 dans le forum Électronique
    Réponses: 0
    Dernier message: 14/04/2008, 04h27
  4. comment determiner les valeurs des jeu au niveau des paliers d'une pompe
    Par invite75b962d0 dans le forum Technologies
    Réponses: 10
    Dernier message: 31/03/2008, 15h54
  5. déterminer l'équation d'une fonction à partir de ces valeurs
    Par invite7625ba4c dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 05/09/2006, 02h17
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...