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 :

Convertir une date saisie "29/09/2014" en structure tm


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut Convertir une date saisie "29/09/2014" en structure tm
    bonjour,
    tout est dans le titre, je n'ai pas trouvé comment faire cette conversion, j'y suis arrivé par des moyens un peu "simplistes", mais je pense qu'il existe des méthodes plus académiques, si quelqu'un peut m'éclairer, merci
    pour info, voici comment j'ai fait, ça marche, mais je ne pense pas que ce soit très propre
    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
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    int main(void)
    {
        int s, annee, jour, heure, minute, seconde,i; 
     
    	char message[160];
    	char dateSaisie [] = "01/09/2014",jourSaisi[] = "00", moisSaisi[] = "00", anneeSaisie[] = "0000";// c'est pour récupérer la date au format JJ/MM/AAAA;
     
        struct tm ancienMoment;
    	struct tm actuelMoment;
    	struct tm duree_tm;
    	double duree;
        time(&secondes);
     
    	sprintf (dateSaisie, "28/09/2014");
    	for (i=0; i<10; i++)
    	{
    		if (i<2){jourSaisi[i] = dateSaisie[i];}
    		else if ((i>2) && (i<5)){moisSaisi[i-3] = dateSaisie[i];}// i-3 c'est pour écrire dans [0] le 4eme caractère de la chaine initiale
    		else if (i>5){anneeSaisie[i-6] = dateSaisie[i];}
    	}
    	ancienMoment.tm_mday = atoi(jourSaisi);// de 1 à 31, donc jour exact
    	ancienMoment.tm_mon = atoi(moisSaisi)-1; 
    	ancienMoment.tm_year= atoi(anneeSaisie)-1900; 
     
    	system("PAUSE");
     
        actuelMoment =*gmtime(&secondes);
     
     
    	ancienMoment.tm_hour=8;// heure grenwitch
    	ancienMoment.tm_min=6;
    	ancienMoment.tm_sec=0;
     
        printf("%02d/%02d/%04d ; %02d:%02d:%02d\n", actuelMoment.tm_mday, actuelMoment.tm_mon+1,actuelMoment.tm_year+1900, actuelMoment.tm_hour, actuelMoment.tm_min, actuelMoment.tm_sec);
        printf("%02d/%02d ; %02d:%02d:%02d\n", ancienMoment.tm_mday, ancienMoment.tm_mon+1, ancienMoment.tm_hour, ancienMoment.tm_min, ancienMoment.tm_sec);
     
    	}
    	return 0;
    merci à vous
    Cordialement

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    J'aurais fait un sscanf avec un format adéquat, genre "%d/%d/%d".
    Sinon, il faut regarder les fonctions plus officielles : gmtime et ctime.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Un sscanf() devrait suffire.
    Voir aussi du coté de strptime() (si disponible...)

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Ah, je cherchais le strptime
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci LittleWhite et Gagma2.
    je vais regarder du coté de sscanf, attendez vous à ce que je revienne vers vous car je ne suis vraiment pas doué
    Magma, pourquoi tu dis "(si disponible)" à propos de strptime() ? je développe sous vista avec visual C++ 2010 Express et je compile avec la plus ancienne norme (C89)
    c'est compatible ou pas ?
    merci encore à vous 2 pour vos conseils

  6. #6
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    ben voilà, j'ai fait ce que tu suggérais LittleWhite, et effectivement c'est tout simple et ca marche nickel...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sprintf (dateSaisie, "23/09/2014");
    	printf ("%s\n", dateSaisie);
    	sscanf (dateSaisie, "%d/%d/%d", &jj, &mm, &aaaa);
     
    	ancienMoment.tm_mday = jj;
    	ancienMoment.tm_mon = mm -1; 
    	ancienMoment.tm_year = aaaa -1900; 
    	printf ("date saisie convertie = %02d/%02d/%04d\n", ancienMoment.tm_mday, ancienMoment.tm_mon + 1, ancienMoment.tm_year + 1900);//ok ca marche
    merci, je marque le sujet résolu

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par luckyalan Voir le message
    Magma, pourquoi tu dis "(si disponible)" à propos de strptime() ?
    strptime() est POSIX et non pas C standard.

    je développe sous vista avec visual C++ 2010 Express et je compile avec la plus ancienne norme (C89)
    c'est compatible ou pas ?
    Non, mais le code source de strptime() est disponible.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    ok merci Medinoc d'avoir répondu à ma question.
    mon problème est résolu avec sscanf

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 29/06/2005, 10h22
  2. Convertir une date lunaire
    Par djeckelle dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 03/12/2004, 14h06
  3. []Comment convertir une date GMT en date vb ?
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/08/2004, 16h01
  4. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28
  5. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52

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