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

C++ Discussion :

Fonction de calcul de dates


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Fonction de calcul de dates
    Bonjour à tous, et merci de prendre le temps de me lire.

    Voici ma requête pour mon projet professionnel, j'aimerai établir une fonction qui permet d'obtenir à partir d'une date (TDateTime, date d'aujourd'hui par exemple), le premier jour (lundi..) de la semaine antérieur, ainsi que le dernier (dimanche..). En gros une période hebdomadaire qui correspond à la semaine précédant celle en cours. Une deuxième fonction qui elle permet d'obtenir le 01 du mois, ainsi que le 31 du mois (sachant que tous les mois ne termine pas de la même manière), une période donc mensuelle qui correspond au mois précédant celui en cours. Pas mal de monde recherche ce genre de fonction, je voudrais donc la mettre à disposition de tous par la suite. Si vous avez des questions n'hésitez pas, au cas où je n'ai pas été clair.

    Cordialement,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    Oui c'est un besoin récurrent et simple.
    Une seule question donc : Où est ton code ? Ou espères -tu qu'on le fasse à ta place ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Tu devrais trouver ton bonheur dans Boost.DateTime ou Boost.Locale.

    Attention, le premier jour de la semaine n'est pas le même partout dans le monde (aux USA, par exemple, c'est dimanche).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci pour vos réponses, j'ai un bout de code que j'ai commencé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TDateTime * dtToday = new TDateTime(Today());
    int n = dtToday->DayOfWeek();
    n = ((n+6)%7);
    TDateTime * dtLundi = dtToday - n;
    TDateTime * dtDimanche = dtLundi + 6;
    Avec ceci je récupère le lundi et le dimanche mais de ma semaine en cours, et non la semaine précédante.. En effet aux USA le premier jour de la semaine est Dimanche, il me faut récupérer le lundi dans mon cas. Je ne demande pas à ce qu'on me balance les fonctions comme ça, j'aimerai comprendre bien sûr, c'est le but étant novice dans le c++ j'aimerai juste qu'on m'amène sur la bonne voie et vers une solution optimale.

    Cordialement,

  5. #5
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Bonjour,

    Donc tu utilises TDateTime de Embarcadero.

    Je sais que Embarcadero oblige à allouer les instances de la majorité de ses types avec new, mais ce n'est pas le cas de TDateTime : tu peux allouer directement les objets de ce type dans la pile. Ce sera plus simple (pas besoin d'appeler delete) et aussi un peu plus performant.

    A part ça, la ligne de code suivante est erronée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDateTime * dtLundi = dtToday - n;
    Puisque dtToday est un pointeur, alors dtToday - n est aussi un pointeur qui pointe n emplacements avant dtToday, comme si dtToday pointait vers un élément de tableau. Du coup, ton dtLundi est un pointeur qui pointe vers n'importe quoi.
    Même remarque pour la ligne suivante avec dtDimanche.

    A part ça, même au niveau des indices, le code est faux. TDateTime.DayOfWeek() retourne un entier entre 1 et 7. Si on est dimanche, il retourne 1.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Re,

    Voici le code que j'ai établi du coup pour ma période mensuelle prenant le mois précédant celui en cours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TDateTime dtLast = Today();
    TDateTime dtFirst = Today();
    Word Year, Month, Day;
    DecodeDate(dtLast, Year, Month, Day);
    TDateTime dtDernier = dtLast - Day;
    Month = Month - 1;
    Day = (Day - Day) + 1;
    dtFirst = EncodeDate(Year, Month, Day);
    TDateTime dtPremier = dtFirst;
    Sachant qu'il faut faire attention au cas où le mois est en Janvier la valeur passera à 0 avec ce code, il suffit donc de rajouté une condition pour ce mois en question.
    Il me reste donc à établir ma fonction pour la période hebdomadaire précédant la semaine en cours.

    Cordialement,

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Je comprends pas pourquoi tu fais aussi compliqué. Je n'ai jamais utilisé Embarcadero mais la documentation donnée par Pyramidev contient déjà absolument tout le nécessaire (et bien plus).
    http://docwiki.embarcadero.com/Libra...eUtils.IncWeek
    http://docwiki.embarcadero.com/RADSt..._date_et_heure
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Avec la documentation que tu m'as donné j'obtiens la même chose que ce que j'ai posté juste avant, je me complique encore trop la vie je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TDateTime dtLastone = Tomorrow();
    Word Yearone, Monthone, Dayone, Yeartwo, Monthtwo, Daytwo;
    DecodeDate(dtLastone, Yearone, Monthone, Dayone);
    TDateTime dtDernierone = dtLastone - IncDay(Dayone - 1);
    DecodeDate(dtDernierone, Yeartwo, Monthtwo, Daytwo);
    TDateTime dtPremierone = dtDernierone - IncDay(Daytwo - 2);
    Cependant j'obtiens la deuxième date en fonction de la première, je pense que si le mois se termine à 30 jours ou encore à 28 voir 29 dans certains cas, je n'obtiendrais pas la bonne date au niveau du 01 jours du mois. Il me manque donc quelques conditions ?

    Cordialement,

Discussions similaires

  1. Imbrication de fonction avec calcul sur date
    Par blazko49 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2013, 15h19
  2. Réponses: 6
    Dernier message: 12/01/2008, 18h21
  3. Fonction de calcul du nb de jour entre 2 dates
    Par Teugos dans le forum SAP
    Réponses: 3
    Dernier message: 20/09/2007, 18h12
  4. fonction en excel : calcul sur date
    Par bertrand_declerck dans le forum Excel
    Réponses: 1
    Dernier message: 06/11/2006, 13h02
  5. [Date] Fonction de calcul de durée entre 2 dates
    Par jesus144 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/01/2006, 16h36

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