Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.2.2 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

N+1 ou N-1 pour une date ou heure ???

Bonjour, je cherche comment je pourrais ajoute un jour de plus ou enlever un jour à ma date avec cette ligne :
QDateTime::currentDateTime().toString("dd/MM/yyyy")
Je cherche également comment faire cela avec l'heure de l'ordinateur en soustrayant 30minutes ou une heure ou en lui ajoutant le temps que je souhaite ??

Pouvez vous m'aider
merci

Réponses

  • Bonjour,

    QDateTime::currentDateTime().addDays( n ).toString("dd/MM/yyyy");

    avec n = nombre de jours en plus ou en moins !


    PS : Qt possède une documentation, elle ne s'use que si l'on ne s'en sert pas :lol:
  • Hello,

    Ajouter/enlever des jours a une QDate : voir la doc de "addDays".
    Pour jouer avec les heures tu as "addSecs" et meme "addMSecs".
  • Bonjour,
    merci tatou_49

    Pour ce qui est de la documentation, je te rassure je la lis, trop meme au point parfois de m'y perdre
    J'ai du raté ce passage avec le QDateTime, merci je vais me replonger dans ce passage

    merci
  • Merci refracto
    Vous venez de m'aiguiller superbement bien
    A moi de jouer maintenant
    Un grand merci
  • Bon,j'ai réussi ce que je voulais faire, je suis meme parvenu à intégré la date du jour, la date du jour -1 et la date du jour +1 dans un QComboBox ( et tout seul ca )
    merci pour votre aide.

    Par contre vous allez me dire que ma question est c.... mais comment je fait pour faire la meme chose mais avec un QLineEdit comportant un date ou une heure
    J'ai beau regarder dans la doc du QLineEdit je ne trouve pas, a vrai dire je ne suis pas très doué en anglais alors ca me complique un peu la tache

    vous pouvez m'aider un peu, j'ai essayer ca mais ... mais a vrai dire j'ai du mal a comprendre comment faire
     int valeur = champ9->text().toInt() + 1
  • QDateTime::fromString()

    Ou bien utiliser un QDateTimeEdit.
  • December 2011 modifié
    Bonjour BBenJ,

    Je suis en train d'essayer plusieurs chose mais je n'y arrive pas, voila ce que j'ai fait, j'ai changer mon QLineEdit en QDateTimeEdit c'est mieux je pense mais je n'arrive pas à lui ajouter un jour ou lui soustraire un jour
    champ224 = new QDateTimeEdit(QDateTime::currentDateTime());
    champ224->setDisplayFormat("dd/MM/yyyy");
  • Bonsoir !

    Cela n'a pas de sens de rajouter une quantité à un champ d'édition : il faut récupérer la date qu'il y a dedans, rajouter 1 jour, et affecter la nouvelle valeur au champ. :)
  • bonsoir PapaJaac,
    C'est bien ce que je souhaite faire justement mais je n'y arrive pas
  • argon71 said:
    bonsoir PapaJaac,
    C'est bien ce que je souhaite faire justement mais je n'y arrive pas
    QDateTime d = champ224->dateTime (); 
    // tu ajoutes 1 jour à d
    // ensuite
    champ224->setDateTime (<d+1jour>);
    non ?
  • ca te parait très simple pour toi qui à de l'expérience mais pour moi ca ne l'ai pas
    je rappel que je débute dans la programmation depuis aout 2011
    je trouve que je me débrouille plutot bien car mon programme est bien avancé à 85% je dirais et croyez moi il est très long ( 8020 lignes ) et je m'en sort
    Bon, je suis toujours sur ce probleme que je n'arrive pas à résoudre je cherche je cherche
  • Voila ce que j'ai fait mais probleme
    QDateTimeEdit d = champ224->currentDateTime().addDays( -1 ).toString("dd/MM/yyyy");
  • PapaJaac said:
    QDateTime d = champ224->dateTime (); 
    // tu ajoutes 1 jour à d
    // ensuite
    champ224->setDateTime (<d+1jour>);
    PapaJaac t'as donné une méthode.

    Pour ce qui est de la partie , tu as dis toi-même avoir trouvé comment faire...

    Je ne vois plus où est le problème...
  • argon71 said:
    QDateTimeEdit d = champ224->currentDateTime().addDays( -1 ).toString("dd/MM/yyyy");
    Un conseil : évite les instructions complexes sur une seule ligne, n'hésite pas à décomposer tes calculs, à créer des variables intermédiaires.
    Si tu le fais tu te rendras compte que dans la ligne ci-dessus tu essaies d'affecter une chaîne à une variable qui est en fait un pointeur sur un QDateTimeEdit
    C++ ne peut pas accepter cela.

    Que veux-tu faire exactement ? Ce que je comprends :

    - Tu as la date au format QDateTime qui s'affiche dans un champ QDateTimeEdit dont le nom est champ224. Ok
    Tu veux la récupérer, c'est à dire la copier dans une variable
    Après tu veux lui ajouter 1 jour. On a vu comment faire.
    Ta valeur étant une copie, ça ne mettra pas le champ à jour.
    Donc que veux-tu faire du résultat ?
    Mettre à jour le champ ? dans ce cas tu n'as pas besoin de formater avec toString().
    Pense que toString () est un commande de formatage de l'affichage de la date. C'est une chaîne de caractères. À quoi te sert-elle ?

    - À moins que tu veuilles simplement mettre la date du lendemain (ou de la veille) dans un QDateTimeEdit. ? ou dans un autre widget ?

    Ne nous laisse pas deviner : dis-nous exactement ce que tu veux obtenir à l'affichage. :)
  • Oui j'ai dit que je savais faire de cette manière c'est à dire à partir de la date de l'ordinateur
    DateDuJourmoins1 = new QLineEdit (QDateTime::currentDateTime().addDays( -1 ).toString("dd/MM/yyyy"));
    Mais je n'ai jamais fait cela avec un QDateTimeEdit, pour vous dire j'ai utilisé un QLineEdit pour tous les champs de Date ( comme la date de naissance, ...) au format date
    Je dois donc changer ces QLineEdit en QDateTime Edit ( j'en ai 8 ) mais ca ne me pose pas de problème ca
  • PapaJaac said:
    [quote=argon71]
    QDateTimeEdit d = champ224->currentDateTime().addDays( -1 ).toString("dd/MM/yyyy");
    Un conseil : évite les instructions complexes sur une seule ligne, n'hésite pas à décomposer tes calculs, à créer des variables intermédiaires.
    Si tu le fais tu te rendras compte que dans la ligne ci-dessus tu essaies d'affecter une chaîne à une variable qui est en fait un pointeur sur un QDateTimeEdit
    C++ ne peut pas accepter cela.

    Que veux-tu faire exactement ? Ce que je comprends :

    - Tu as la date au format QDateTime qui s'affiche dans un champ QDateTimeEdit dont le nom est champ224. Ok
    Tu veux la récupérer, c'est à dire la copier dans une variable
    Après tu veux lui ajouter 1 jour. On a vu comment faire.
    Ta valeur étant une copie, ça ne mettra pas le champ à jour.
    Donc que veux-tu faire du résultat ?
    Mettre à jour le champ ? dans ce cas tu n'as pas besoin de formater avec toString().
    Pense que toString () est un commande de formatage de l'affichage de la date. C'est une chaîne de caractères. À quoi te sert-elle ?

    - À moins que tu veuilles simplement mettre la date du lendemain (ou de la veille) dans un QDateTimeEdit. ? ou dans un autre widget ?

    Ne nous laisse pas deviner : dis-nous exactement ce que tu veux obtenir à l'affichage. :)[/quote]



    Bonjour PapaJaac,

    Je constate que tu m'explique avec sérieux ce que je ne comprend pas et je t'en remercie car lorsque je viens sur ce site pour obtenir une réponse, je cherche également à comprendre avant tout. cela ne servirait a rien de me donner un code tout fait, tout chaud si je ne le comprend pas.

    Pour en revenir à mon but
    Tu as tout a fait compris ce que je voulais faire
    J'ai un champ224 qui est un QDateTimeEdit
    champ224 = new QDateTimeEdit();
    champ224->setDisplayFormat("dd/MM/yyyy");
    Je souhaite lui ajouter ou lui enlevé 1 jour (voir plus selon l'utilisation par exemple pour des factures entreprises le règlement s'effectue à 60jours)
    Cette date ainsi obtenue sera affichée dans un text ( je l'appellerai DateNplus1 ou DateNmoins1 ou DateNplus60 ... )
    {string const nomFichier("Dossiers factures/facture.txt");
    ofstream monFlux7(nomFichier.c_str());
    if(monFlux7)

    {
    monFlux7 << DateNplus1->text().toStdString() << endl;
    }
  • Voilà, si tu décomposes en donnant des noms parlants à tes variables intermédiaires, ça s'écrit tout seul ou presque :
        // QDateTimeEdit* champ223; défini avant
    // QLabel* DateNplus1; défini avant

    QDateTime dateContenueDansLeChamp223 = champ223->dateTime ();
    QDateTime lendemainDeCetteDate = dateContenueDansLeChamp223.addDays (1);
    QString lendemainSousFormeDeTexte = lendemainDeCetteDate.toString ("dd/MM/yyyy");
    DateNplus1->setText (lendemainSousFormeDeTexte);
    J'ai exagéré pour les noms parlants, hein ! mais c'est plus facile à lire avec une instruction par ligne, n'est-ce pas ?
  • Merci PapaJaac,

    Je viens finalement de conclure à 2 choses principales :
    Je dois impérativement utilisé des noms de champ plus compréhensibles ( c'est le cas dans ton code PapaJaac ) et forcément je m'y perd
    Je dois également décomposé mes codes, car j'ai cette facheuse habitude de tout mettre sur la meme ligne, il faut que je remédi a ca

    Finalement, tu vas rire PapaJaac je pense que je vais copie ton code et je vais garder le nom des variables que tu as mis, je changerai les miennes en leur mettant les noms que tu as mis, je les trouve en effet tres parlant
    lol
  • Pour information, j'ai légèrement modifier ton code PapaJaac voici ce que ca donne ( et ca fonctionne )
    QDateTime dateContenueDansLeChamp224 = champ224->dateTime(); // céation d'une variable ( une copie ) du champ224
    QDateTime lendemainDeCetteDate = dateContenueDansLeChamp224.addDays (60); // Ajout à la copie 60 jours
    QString lendemainSousFormeDeTexte = lendemainDeCetteDate.toString ("dd/MM/yyyy"); // je transforme le résultat en un QString (chaîne de caractères)
    DateReglement = new QLineEdit (lendemainSousFormeDeTexte); // Je créé un QLineEdit avec cette chaîne de caractères

    {
    string const nomFichier("Dossiers factures/facture.txt");
    ofstream monFlux7(nomFichier.c_str());
    if(monFlux7)
    {
    monFlux7 << "Règlement avant le : " << DateReglement->text().toStdString() << endl; // J'utilise mon QLineEdit dans ma facture
    }
    Et le tour est joué ( mdrrr c'est moi qui dit ca alors que ca fait 2 jours que je m'arrache les cheveux dessus )
    Je suppute que c'est pareil avec l'heure, je vais essayer même si finalement, le meme principe avec l'heure ne m'ai plus d'une très grande utilité, je vais quand meme voir comment ca fonctionne ( histoire de dormir moins c... )
  • :D

    Pour l'heure c'est exactement le même principe.
    Note que tu as plus joli qu'un QDateTimeEdit : le QCalendarWidget. Mais il prend de la place. ;)
  • Oui je constate que c'est le meme principe avec l'heure soit avec "addSecs" et "addMSecs
    J'ai jamais essayer avec un QCalendarWidget car j'ai vu en effet sur la doc qu'il prennait de la place et au vu du nombre important de champs que j'ai ca ne tiendra pas
  • December 2011 modifié
    Ca c'etait facile lol
    dateContenueDansLeChamp224.addSecs (1800);
  • Hello,
    Tu peux activer le QCalendarWidget en popup sur un QDateTimeEdit.
  • oui je pourrai mais je ne pense pas que son utilisation sera adaptée à mes besoins mais c'est une solution à envisager
  • Une petite question
    Il existe une fonction pour un QSpinBox pour l'implémenter de 5 en 5 par exemple
    iu->SetSingleStep(5);
    Existe-il la meme chose pour l'heure par exemple de 5min en 5min ( en fait je voudrai que l'heure d'un QDateTimeEdit se termine soit par un 0 soit par un 5 (je parle des minutes ), rien d'autre
  • Cette fonction ne doit apparament pas existe, j'ai retourner la doc dans tout les sens et je ne trouve rien qui pourrai correspondre
Connectez-vous ou Inscrivez-vous pour répondre.