IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Besoin d'un avis pour comparaison d'horaires


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut Besoin d'un avis pour comparaison d'horaires
    Bonjour a tous,



    Je developpe une petite appli en MFC, sous visual c++, qui doit aller récupérer un horaire sur une base de donnée, puis le comparer a l'heure actuelle. Je sais récupérer l'heure actuelle sans problème. J'ai juste besoin d'un conseil, savoir, comment me conseillez vous de stocker mon horaire dans ma base de donnée ( afin que ma comparaison avec l'heure actuelle soit la plus simple possible ).

    Actuellement, les dates a saisir dans ma base de donnée, sont sous forme CString ex : 14H36
    Me conseillez vous de les "passer" en décimal, donc 14.6 ?

    Note: Je récupere l'heure courant sous la forme d'un CSTRING du style hh:mm

    Merci a tous !!! Bonne journée

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    La classe CTime permet d'enregistrer les dates, et permet en plus de faire des opérations, notamment de comparaison, sûrement ce qui t'intéresse.
    Bon courage

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Nixeus
    comment me conseillez vous de stocker mon horaire dans ma base de donnée ( afin que ma comparaison avec l'heure actuelle soit la plus simple possible ).
    Perso, je stockerais mon horaire dans un champ de type date ou datetime ou time,
    cela te permettras d'extraire plus facilement les données et sous différentes formes (on sait jamais ),
    et surtout cela évitera des prises de tête ultérieures qd il faudra faire évoluer l'appli.

    Pour ce qui est de la comparaison en elle-même, je te conseil le format hhmm qui est le plus simple car il suffit juste de convertir tes CString en nombre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    atoi("1436") < atoi("1559");
    Maintenant, si tu suis mon conseil,
    tu peux directement faire la comparaison dans ta requête sql,
    chaque sgbd permet d'accéder à la date courante ex sous Oracle : SYSDATE, sous MySQL : now(), ...
    et même l'insertion, avec ces mêmes fonctions.
    Avantage : cela évite d'utiliser l'heure système du PC, qui peut facilement être modifier.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Merci pour votre réponse !
    En effet, pas bete l'idée de récupérer la date dans le SGBD, mais ell provient du pc non? Si ma base est une Acces en LOcal?

    Merci encore

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Nixeus
    Merci pour votre réponse !
    En effet, pas bete l'idée de récupérer la date dans le SGBD, mais ell provient du pc non? Si ma base est une Acces en LOcal?

    Merci encore
    Oui, effectivement, sur un base local, c'est la même.
    Mais je savais pas que tu était en local sous Access

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Pas de problème, mais ton idée est intelligente !!!!!

    Quelqu'un viens de me proposer une solution assez optimisé pour la comparaison des horaires, qui serais de "packer" mes deux horaires dans deuw DWORD, puis d'y faire une simple comparaison !

    Je teste cela, et donnerais des news alors!

    Meci

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Est-il possible que tu aies besoin de comparer deux heures appartenant à deux jours différents ?

    Ex : 26/04/2007 23h58 par rapport à 27/04/2007 00h02

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Salut,

    Non, car en fait, avant de faire la comparaison je passe par ma méthode GetTime( qui me renvoie l'heure courante), et je la compare avec une heure fixe ( je choisi une plage horaire par rapport a un jour de la semaine)

    Donc en réalité, la date n'a absolument rien a voir !

    Pourquoi?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    C'est juste que si tu veux comparer deux heures (supérieure à, inférieure à) ou calculer un écart en minutes, il faut tenir compte de la date si les deux heures n'appartiennent pas au même jour

    10h02 25/04/2007 < 20h47 25/04/2007

    mais

    10h02 26/04/2007 > 20h47 25/04/2007

  10. #10
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Oui, donc dans ce cas la, comparer deux DWORD n'aurais pas été judicieux, il est vrai !

    AA, voici mon code, pour ceux qui souhaitent le voir :

    CString heure="15";
    CString minutes="21";
    CString seconde="12";
    DWORD dHeure, dMinute;
    dHeure = atoi(heure);
    dMinute = atoi(minutes);
    dHeure <<= 16; // 0x00HH00
    dMinute <<= 8;
    dHeure |= dMinute; // 0x00HHMM00
    dHeure |= atoi(seconde);

    CString heuree="15";
    CString minutess="21";
    CString secondee="11";
    DWORD dHeuree, dMinutee;
    dHeuree = atoi(heuree);
    dMinutee = atoi(minutess);
    dHeuree <<= 16; // 0x00HH00
    dMinutee <<= 8;
    dHeuree |= dMinutee; // 0x00HHMM00
    dHeuree |= atoi(secondee);

    if (dHeure<dHeuree)
    {
    AfxMessageBox("PLUS PETIT");

    }

    if (dHeure>dHeuree)
    {
    AfxMessageBox("PLUS GRAND");

    }

    }

  11. #11
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Désolé pour le nom des variables à l'arrach, j'ai voulu faire vite afin de tester !
    L'avantage de ce code est que cette méthode est très rapide !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    plus simple .... et plsu lisible :

    CString heure="15";
    CString minutes="21";
    CString seconde="12";
    int nHeureEnSeconde1 = atoi(heure)*3600 + atoi(minutes)*60 + atoi(seconde);

    CString heuree="15";
    CString minutess="21";
    CString secondee="11";
    int nHeureEnSeconde2 = atoi(heuree)*3600 + atoi(minutess)*60 + atoi(secondee);

    if (nHeureEnSeconde1 < nHeureEnSeconde2 )
    {
    AfxMessageBox("PLUS PETIT");

    }

    if (nHeureEnSeconde1 >nHeureEnSeconde2 )
    {
    AfxMessageBox("PLUS GRAND");

    }

    }

  13. #13
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Oui, mais la tu fais une comparaison sur un int, moi un DWORD.
    DWORD se traite aparamment plus rapidement !

  14. #14
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Oui, mais la tu fais une comparaison sur un int, moi un DWORD.
    DWORD se traite aparamment plus rapidement !

Discussions similaires

  1. Besoin de votre avis pour nouveau processeur
    Par Actarus9999 dans le forum Composants
    Réponses: 5
    Dernier message: 17/11/2007, 20h33
  2. Besoin de votre avis pour app réseau et données Excel
    Par BM42 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/12/2006, 11h42
  3. [UML] Besoin d'un avis pour un diagramme de collaboration
    Par skystef dans le forum Autres Diagrammes
    Réponses: 2
    Dernier message: 26/04/2006, 15h51
  4. Besoin d'un avis pour max_connections
    Par simoryl dans le forum Requêtes
    Réponses: 9
    Dernier message: 03/04/2006, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo