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 :

Extraire l'année en cours


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Extraire l'année en cours
    Bonjour à tous
    Comme tout débutant, je fais mes exercices.
    Je ne trouve pas la fonction pour récupérer la date et éventuellement extraire l'année.
    Après avoir cherché, j'ai récupéré et adapté "ce truc".
    Ça fonctionne mais sans doute, il y aurait mieux à faire que de partir depuis 1970 !
    Merci pour vos retours.


    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
     
    #include <iostream>
    #include <ctime>
     
    using namespace std;
     
    int main()
    {
        cout << "Quel ages avez-vous ?" << endl;
        unsigned short int age(0);
        cin >> age;
        unsigned int nombreSecondeDepuis0170 = time(NULL);  //nbre de secondes depuis 1er janvier 1970.
        unsigned short int nbreAnneeDepuis0170(nombreSecondeDepuis0170/60/60/24/365);
        unsigned short int anneeEnCours(nbreAnneeDepuis0170+1970);
        unsigned short int anneeNaissance(anneeEnCours-age);
        cout << "vous etes ne en " << anneeNaissance << endl;
        return 0;

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Le plus gros problème, c'est pas la limitation à 1970, c'est la non-gestion des années bissextiles, les secondes additionnelles liée à la rotation de la Terre qui n'est plus de pile 24heures, etc...
    Alors vouloir gérer des dates qui peuvent être dans des calendriers autres que grégorien (plus de 2000 calendriers différents existent sur Terre) et que la nuit du passage eu calendrier Julien au calendrier Grégorien est fonction du lieu (https://fr.wikipedia.org/wiki/Passag...gr%C3%A9gorien), faudrait pas mettre la charrue avant les bœufs.

    Normalement, une simple soustraction entre l'année courante, fourni par l'OS, et l'âge du l'utilisateur fera très largement l'affaire.

    https://stackoverflow.com/questions/...-and-date-in-c

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci pour votre retour.
    je regarde tout ça avec intérêt pour l'intégrer dans le code.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,
    j'ai mis le temps et c'est pas encore très clair pour moi.
    Mais ça ma permis de découvrir pas mal de chose sur le temps et les chaines de caractères.
    Voici le nouveau code en tenant compte de vos commentaires.
    Merci pour l'aide et
    Merci pour les retours.

    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
    32
    33
    34
     
    #include <iostream>
    #include <ctime>
    #include <string>
     
    using namespace std;
     
     
    int main()
    {
        time_t rawtime;
        struct tm * timeinfo;
        char buffer [5];
     
        time (&rawtime);
        timeinfo = localtime (&rawtime);
     
        strftime (buffer,5,"%Y",timeinfo);  //stocke l'annee(%Y) dans char(5) nommé buffer
     
        string alpha_anneeEnCours(buffer);  //jusque là j'ai pas tout compris
        unsigned short int anneeEnCours(0);
        anneeEnCours=(stoi(alpha_anneeEnCours));
     
        cout << "Quel ages avez-vous ?" << endl;
        unsigned short int age(0);
        cin >> age;
     
        cout << "vous etes ne(e) en "
             << anneeEnCours-age
             << "."
             << endl;
     
        return 0;
    }

  6. #6
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    On pourrait remplacer les lignes 18 à 22 par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto anneeEnCours = 1900 + timeinfo.tm_year;

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    bonsoir
    je teste.
    Merci.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 119
    Points
    119
    Par défaut
    Bonjour,

    Je ne sais pas si je suis dans le vrai sujet, mais j'ai une proposition sur la base de ne pas réinventer la poudre. En effet, la bib date.h de Howard Hinnant dont voici un zip : date-master.7z fait tout ça très bien. Il suffit de placer le fichier date.h dans le chemin d'inclusion. Les autres fichiers constituent une partie additionnelle concernant les localisations (timezone).
    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
     
    using namespace std;
    using namespace date;
    using namespace std::chrono;
     
    int main(int, char *[])
    {
        auto ce_jour =  floor<days>(system_clock::now());
        //cout << ce_jour << "  " << year_month_day(ce_jour).year() << std::endl;
     
        cout << "Quel ages avez-vous ?" << endl;
        unsigned short int age(0);
        //cin >> age;
        age = 20;
        cout << "vous etes ne(e) en "
             << year_month_day(ce_jour).year()-years(age)
             << "."
             << endl;
     
        return 0;
    }
    sortie :
    Quel ages avez-vous ?
    vous etes ne(e) en 1998.
    La bibliothèque en question est un surensemble de std::chrono, lui apportant un nombre important de fonctions de calcul, de transtypage et d'E/S, entre autres.
    Je pense qu'elle mérite un certain intérêt.

    @ bientôt,
    Marc
    P.S. avec le code complet c'est mieux.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour Marc,
    je regarde ça, intéressant.
    je teste dans le code.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] afficher automatiquement l'année en cours
    Par Christophe93250 dans le forum Access
    Réponses: 2
    Dernier message: 11/05/2006, 14h57
  2. [SQL] critère année en cours
    Par r@phy dans le forum Access
    Réponses: 2
    Dernier message: 11/02/2006, 18h43
  3. Inferieur ou egal a l'année en cours
    Par gohu13 dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 10h35
  4. Réponses: 16
    Dernier message: 29/04/2005, 14h39
  5. Extraire l'année d'un type date
    Par tonyskn dans le forum Oracle
    Réponses: 3
    Dernier message: 10/11/2004, 18h33

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