Les Allergies
Alimentaires
Posez votre question Signaler

Convertir un string en date en langage c

iamoki 4Messages postés 18 mars 2010Date d'inscription 25 mars 2010Dernière intervention - Dernière réponse le 19 mars 2010 à 14:03
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.
Lire la suite 

Convertir un string en date en langage c »

14 réponses
Réponse
+2
moins plus
$ 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
$ 
$ 
iamoki- 18 mars 2010 à 17:32
Windows, jutilise Code::Blocks
dubcek- 19 mars 2010 à 09:36
elle est peut-être dans une librairie particulière si elle existe
iamoki- 19 mars 2010 à 10:33
ok, je voi tjs pa cmt faire...
Ajouter un commentaire
Réponse
+1
moins plus
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
iamoki- 18 mars 2010 à 15:28
g essayé strptime() en 1er mais g pa compris il ne le reconnaissait même avec l'include de time.h...
Merci.
Ajouter un commentaire
Réponse
+0
moins plus
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.
iamoki- 18 mars 2010 à 13:56
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!!
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
iamoki- 18 mars 2010 à 15:27
c ma solution temporaire.. mais je veux trouver mieux, je veux l'optimiser..
Merci!
Ajouter un commentaire
Réponse
+0
moins plus
$ 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
$ 
iamoki- 19 mars 2010 à 14:03
Merci c'est super pratique ^^
Ajouter un commentaire
Ce document intitulé « Convertir un string en date en langage c » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?