Convertir un string en date en langage c

iamoki Messages postés 24 Statut Membre -  
iamoki Messages postés 24 Statut Membre -
Bonjour,

Je souhaite convertir une chaîne de caractère en format date en langage c et non pas en langage c++ ni c# svp, de la façon suivante :
char *str="2009-11-19 13:33:47.51";
Et je veux obtenir des variables où j'aurai les valeurs de l'année, du mois, du jour, de l'heure, des minutes et de secondes.

Merci de votre aide.

5 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    $ cat date2.c
    #include <stdio.h>
    #include <time.h>
    
    main()
    {
    	struct tm tm;
    	char *str="2009-11-19 13:33:47.51"; 
    
    	strptime(str,"%Y-%m-%d %H:%M:%S", &tm);
    	printf("%d/%d/%d %d:%d:%d\n", tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
    }
    $ 
    $ make date2
    cc     date2.c   -o date2
    $ ./date2
    2009/11/19 13:33:47
    $ 
    $ 
    
    3
    1. iamoki Messages postés 24 Statut Membre
       
      j'ai réessayé et il me retourne toujours la même erreur : undefined reference to '_strptime'
      Je comprends pas...
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      sur quel système ?
      0
    3. iamoki Messages postés 24 Statut Membre
       
      Windows, jutilise Code::Blocks
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      elle est peut-être dans une librairie particulière si elle existe
      0
    5. iamoki Messages postés 24 Statut Membre
       
      ok, je voi tjs pa cmt faire...
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    voir aussi strptime
    strptime

    Nom
    strptime - Conversion d'une chaîne représentant une date en une structure tm.
    Synopsis
    #include <time.h>

    char *strptime (char *buf, const char *format, const struct tm *tm);

    Description
    La fonction strptime() est complémentaire de la fonction strftime(). Elle convertit la chaîne de caractères pointée par buf en une valeur qui est stockée dans la structure tm pointée par l'argument tm,

    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strptime.3.html
    1
    1. iamoki Messages postés 24 Statut Membre
       
      g essayé strptime() en 1er mais g pa compris il ne le reconnaissait même avec l'include de time.h...
      Merci.
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    $ cat date3.c
    #include <stdio.h>
    
    main()
    {
    	int a, m, j ,h, min, s;
    	char *str="2009-11-19 13:33:47.51"; 
    
    	sscanf(str, "%d-%d-%d %d:%d:%d", &a, &m, &j, &h, &min, &s);
    	printf("%d/%d/%d %d:%d:%d\n", a, m, j, h, min, s);
    }
    $ 
    $ make date3
    cc     date3.c   -o date3
    $ ./date3
    2009/11/19 13:33:47
    $ 
    
    1
    1. iamoki Messages postés 24 Statut Membre
       
      Merci c'est super pratique ^^
      0
  4. swed
     
    Bonjour,
    Pour obtenir les différentes variables que tu souhaites, il suffit de découper la chaine avec une boucle.

    Par exemple :
    int pos = 0;
    for (int i=0;i<4 && i<strlen(str);i++)
    { strAnnee[pos]=str[i]; pos++; }
    strAnnee[pos]='\0';

    ...Etc...

    Cordialement, M.
    0
    1. iamoki Messages postés 24 Statut Membre
       
      j'y ai pensé mais ça me fait utilisé tro de boucle (for) en fait, je cherche une solution "moins lourde" si possible!!!
      Merci pour votre aide!!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. swed
     
    Bonjour,
    Alors il serait peut-être sympa de te servir de cette fonction :

    char *strtok (char *s, const char *t);
    Cette fonction décompose la chaîne s en sous-chaîne délimitées par un caractère appartenant à ct. Un appel ultérieur à strtok avec s égale à NULL, retourne la sous-chaîne suivante ; ct peut être différent à chaque appel.
    La chaîne passée en argument est modifiée par la fonction : elle ajoute un caractère de fin de chaîne à la place du séparateur.

    Qu'en penses tu ?
    0
    1. iamoki Messages postés 24 Statut Membre
       
      c ma solution temporaire.. mais je veux trouver mieux, je veux l'optimiser..
      Merci!
      0