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 :

CDateTimeCtrl::GetTime() et comparaison


Sujet :

MFC

  1. #1
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut CDateTimeCtrl::GetTime() et comparaison
    Bonjour à tous.

    J'ai deux objets de type CDateTimeCtrl sur mon formulaire et j'aimerai recuillir et comparer les heures. Mais seulement il se trouve qu'il se comporte bizarrement.

    Par exemple m_dateDebut affiche 16:30 et m_dateFin affiche 17:30 et ceci ne marche pas bien
    En fait il m'affiche le message alors qu'il ne devrait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     COleDateTime m_THeureDebut;
    COleDateTime m_THeureFin;
     
    m_dateDebut.GetTime(m_THeureDebut);
    m_dateFin.GetTime(m_THeureFin);
    if (m_THeureFin <= m_THeureDebut)
    	{
    		AfxMessageBox("L'heure de fin doit être ultérieure à l'heure de début",MB_ICONINFORMATION);
    		return;
    	}
    Quelqu'un peut il m'aider?

  2. #2
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Si quelqu'un pouvait m'expliquer le fonctionnement de COleDateTime et l'opératuer de comparaison.

    Merci d'avance

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Salut le Cameroun
    Je ne comprends pas GetTime d'après le MSDN n'est pas membre de COleDateTime.
    Mais plutôt GetCurrentTime...

    COleDateTime::GetCurrentTime
    static COleDateTime PASCAL GetCurrentTime( );

    Remarks

    Call this static member function to return the current date/time value.

    Example

    COleDateTime dateTest;
    // dateTest value = midnight 30 December 1899

    dateTest = COleDateTime::GetCurrentTime();
    // dateTest value = current date and time

  4. #4
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Justement GetTime est membre de CDateTimeCtrl.

    Lorsque je fais CDateTimeCtrl.GetTime je recupère dans un COleDateTime et je cherche à comparer les valeurs récupérées dans deux CDateTimeCtrl.

    Merci

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Par défaut
    Bonjour,

    Comme vous utiliser des controles CDateTimeCtrl, je suppose que ce code
    se trouve dans une dialogbox, etes vous certain que votre controle contient
    bien les valeurs affichées avant de vouloir les utiliser,
    avez vous fait un appel a la fonction 'UpdateData(TRUE)' pour
    que vos controles contiennent les valeurs affichées dans la dialog?

    Bien à vous

  6. #6
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par pipin
    Bonjour,

    Comme vous utiliser des controles CDateTimeCtrl, je suppose que ce code
    se trouve dans une dialogbox, etes vous certain que votre controle contient
    bien les valeurs affichées avant de vouloir les utiliser,
    avez vous fait un appel a la fonction 'UpdateData(TRUE)' pour
    que vos controles contiennent les valeurs affichées dans la dialog?

    Bien à vous
    Bien sur que mes contrôles contiennent la bonne valeur et lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDateTimeCtrl.GetWindowText(maChaine)
    cela me renvoit la vrai valeur affichée dans le controle.

    Merci

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Par défaut
    Bonjour,

    Je suis désolé, mais j'ai un doute car je fais exactement la même
    chose dans un de mes programmes et cela fonctionne parfaitement.
    Il faudrait peut-être nous envoyer un peut plus de code.

    Bien à vous

  8. #8
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Nous y voici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    //DANS LE .H
    public:
       CDateTimeCtrl m_dateDebut;
       CDateTimeCtrl m_dateFin;
       COleDateTime m_THeureDebut;
       COleDateTime m_THeureFin;
     
    //DANS LE .CPP
    void MonFormulaire::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_DATETIMEPICKER3, m_dateDebut);
    DDX_Control(pDX, IDC_DATETIMEPICKER4, m_dateFin);
    }
     
    void MonFormulaire::OnBnClickedAjouter()
    {
    UpdateData(TRUE);
    m_dateDebut.GetTime(m_THeureDebut);
    m_dateFin.GetTime(m_THeureFin);
    if (m_THeureFin <= m_THeureDebut)
    	{
    		AfxMessageBox("L'heure de fin doit être ultérieure à l'heure de début",MB_ICONINFORMATION);
    		return;
    	}
    BeginWaitCursor();
    //MonTraitement
    m_bAjouter.EnableWindow(FALSE);
    EndWaitCursor();
    }
    Merci pour tout

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Par défaut
    Bonjour,

    C'est exactement comme cela que j'ai écrit mon code

    Bien à vous

  10. #10
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Et ta comparaison fonctionne contrairement à la mienne.

    Mais c'est bizarre ça.

  11. #11
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Est ce que le problème vient du fait que je n'affiche que l'heure dans mes contrôles. Ceci parce que je veux récuperer l'heure de début et de fin d'une opération.

    Parce que à un autre endroit dans mon projet j'utilise la même philosophie pour comparer les dates et ça marche.

    A l'aide SVP.

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut ,si c'est pour comparer des hh:mm:ss il vaut mieux utiliser des objets CTimeSpan.


  13. #13
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par farscape
    salut ,si c'est pour comparer des hh:mm:ss il vaut mieux utiliser des objets CTimeSpan.

    Voilà ce qu'il me dit lorsque je veux récuperer la valeur affichée dans mon contrôle CDateTimeCtrl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e:\Projets\Formulaire.cpp(579): error C2664: 'DWORD CDateTimeCtrl::GetTime(ATL::CTime &) const' : impossible de convertir le paramètre 1 de 'ATL::CTimeSpan' en 'ATL::CTime &'

  14. #14
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Que faire si on désire récuperer l'heure de deux CDateTimeCtrl et comparer ces heures?

    Y a til moyen d'utiliser un autre contrôle?

    A l'aide je me noye.

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Par défaut
    Bonjour,

    Un COleDateTime contient un attribut accessible, 'm_dt' c'est un 'double'
    donc la partie entiere represente le nombre de jours depuis 17xx (je ne sais plus la date exacte) et les decimales representent une fraction
    du jour (exemple 0.25 signifie 6h , 0.5 -> 12h etc)
    Regardez quelle est la valeur de cet attribut pour les 2 dates que vous testez,
    normalement les partie entières doivent etre les meme.
    Si non il y a peut etre un probleme a l'initialisation des 2 controles

    Bien à vous

  16. #16
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Voilà ce qui est dit dans l'aide de MSDN
    The underlying DATE structure for this COleDateTime object.

    DATE m_dt;
    Remarks
    Caution Changing the value in the DATE object accessed by the pointer returned by this function will change the value of this COleDateTime object. It does not change the status of this COleDateTime object.
    For more information about the implementation of the DATE object, see the article Date and Time: Automation Support.
    Et lorsque j'essaie de comparer c'est pareil il me dit que la date de fin est inférieure à la date de debut.

    Je voudrais repréciser que mes contrôles n'affichent que les heures.

    Merci

  17. #17
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Voilà ce qui est dit dans l'aide de MSDN
    The underlying DATE structure for this COleDateTime object.

    DATE m_dt;
    Remarks
    Caution Changing the value in the DATE object accessed by the pointer returned by this function will change the value of this COleDateTime object. It does not change the status of this COleDateTime object.
    For more information about the implementation of the DATE object, see the article Date and Time: Automation Support.
    Et lorsque j'essaie de comparer c'est pareil il me dit que la date de fin est inférieure à la date de debut.

    Je voudrais repréciser que mes contrôles n'affichent que les heures.

    Merci

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut Avec les fonctions de CTime
    Il existe une fonction qui te rend l'heure, et la même qui te rend les minutes, les secondes, etc.... Tu peux donc t'en servir, je pense, pour comparer tes dates entre les deux CTime que tu récupère à partir de tes deux controles...

    CTime::GetHour
    int GetHour( ) const;

    Remarks

    Returns the hour, based on local time, in the range 0 through 23. This function calls GetLocalTm, which uses an internal, statically allocated buffer. The data in this buffer is overwritten as a result of calls to other CTime member functions.

  19. #19
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Je reviens.

    Voilà j'ai utilisé CTime::GetHour mais je me rends compte que quelque soit l'heure affichée dans mes contôles, la fonction ne me renvoie que l'heure actuelle.

    C'est à croire que les valeurs affichées ne sont pas récupérées par cette fonction.

    Merci de votre aide.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut oui normal
    Il faut que tu utilise GetHour mais a partir de l'objet CTime dans lequel tu as mis la valeur qui était dans ton DateTimeCtrl.
    Si tu appelles CTime::GetHour() directement, tu appelle sûrement une fonction statique, et donc qui n'a rien à voir avec ton contrôle... Tu ne peux avoir que l'heure courante alors!

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CTime monCTime;
    _monDateTimeCtrl.GetTime(&monCTime);
    int heure = monCTime.GetHour();
    là normalement, il y a l'heure dans la variable 'heure' !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comparaison dates (getTime)
    Par arthuro45 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 05/10/2009, 21h36
  2. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  3. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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