Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1426 connectés 

  FORUM HardWare.fr
  Programmation
  C

  convertir une date vers un entier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

convertir une date vers un entier

n°1273180
red factio​n
Posté le 25-12-2005 à 21:49:22  profilanswer
 

Existe til une fonction qui permeterai de convertir une string representant une date( ex : 10/10/2004) vers un entier (ex: 36012, etant le nombre de sec depuis le 1/1/1970)

mood
Publicité
Posté le 25-12-2005 à 21:49:22  profilanswer
 

n°1273188
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-12-2005 à 22:14:57  profilanswer
 

red faction a écrit :

Existe til une fonction qui permeterai de convertir une string representant une date( ex : 10/10/2004) vers un entier (ex: 36012, etant le nombre de sec depuis le 1/1/1970)


 
Parser la chaine vers un struct tm (attention, pièges) : sscanf(), puis mktime()...
 
Il est temps d'ouvrir un livre de C...


Message édité par Emmanuel Delahaye le 25-12-2005 à 22:16:23

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1273189
red factio​n
Posté le 25-12-2005 à 22:19:20  profilanswer
 

j'y avait pense a ca mais bon jpensait qu'il y avait une fonction toute faite
 
c lourd parfois le C...

n°1273190
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-12-2005 à 22:22:37  profilanswer
 

red faction a écrit :

j'y avait pense a ca mais bon jpensait qu'il y avait une fonction toute faite
 
c lourd parfois le C...


Non, c'est simple ! (3 lignes de code, et si tu veux tu crées la fonction toi-même)


Message édité par Emmanuel Delahaye le 25-12-2005 à 22:23:40

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1273191
fra0
Posté le 25-12-2005 à 22:25:41  profilanswer
 

oui avec (long)time_t time(time_t *timer);

n°1273192
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-12-2005 à 22:27:22  profilanswer
 

fra0 a écrit :

oui avec (long)time_t time(time_t *timer);


Euh, pour convertir une chaine en epoch ?
 
Montre un peu le code qui fonctionne...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1273194
red factio​n
Posté le 25-12-2005 à 22:44:09  profilanswer
 

Code :
  1. int datetostr(char *str){
  2.     struct tm tt;
  3.     int day,year,months;
  4.     sscanf(str,"%d/%d/%d",&day,&months,&year);
  5.     tt.tm_sec = 0; tt.tm_min = 0; tt.tm_hour = 0;
  6.     tt.tm_mday=day;
  7.     tt.tm_mon=months-1;
  8.     tt.tm_year=year-1900;
  9.     tt.tm_isdst=-1;
  10.     printf("%d %d %d",day,months,year);
  11.     return mktime(&tt);
  12. }


 
jviens de d'essayer ca mais ca me renvoit a chaque fois -1

n°1273197
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-12-2005 à 23:01:49  profilanswer
 

red faction a écrit :

jviens de d'essayer ca mais ca me renvoit a chaque fois -1


Tu n'as pas indiqué les conditions de test...
 
Il faut être très sévère avec les conditions d'entrée. Code commenté et partiellement corrigé.

Code :
  1. /* -ed- headers manquants */
  2. #include <stdio.h>
  3. #include <time.h>
  4.  
  5. /* -ed-
  6. Fonction non exportee (pas de prototype separe).
  7. Ajoute 'static'
  8. Le bon type retour est time_t.
  9. Accepter les chaines non modifiables
  10. */
  11.  
  12. static time_t datetostr(char const *str)
  13. {
  14.   /* -ed- mieux vaut initialiser tous les champs. */
  15.   struct tm tt =
  16.      {
  17.         0
  18.      };
  19.  
  20.   int day, year, months;
  21.  
  22.   /* -ed- manque test du code retour. */
  23.   int n = sscanf(str, "%d/%d/%d", &day, &months, &year);
  24.  
  25.   if (n == 3)
  26.   {
  27.  
  28.      /* -ed- rendu inutiles par l'init
  29.         tt.tm_sec = 0;
  30.         tt.tm_min = 0;
  31.         tt.tm_hour = 0;
  32.      */
  33.  
  34.      tt.tm_mday = day;
  35.  
  36.      /* -ed- bien vu. */
  37.      tt.tm_mon = months - 1;
  38.  
  39.      if (year >= 1970)
  40.      {
  41.         tt.tm_year = year - 1900;
  42.  
  43.         /* -ed-
  44.            tt.tm_isdst = -1;
  45.  
  46.            non. mktime() s'occupe de tout.
  47.            */
  48.  
  49.         /* -ed- manque un '\n'*/
  50.         printf("%d %d %d\n", day, months, year);
  51.      }
  52.      else
  53.      {
  54.         printf("year error: '%s'\n"
  55.                "The correct format is YYYY with year >= 1970\n"
  56.                , str);
  57.      }
  58.   }
  59.   else
  60.   {
  61.      printf("input error: '%s'\n", str);
  62.   }
  63.  
  64.   return mktime(&tt);
  65.  
  66. }
  67.  
  68. int main (void)
  69. {
  70.   time_t epoch = datetostr("25/12/2005" );
  71.  
  72.   printf ("epoch = %ld\n", (long int) epoch);
  73.  
  74.   return 0;
  75.  
  76. }


Ca donne ça


25 12 2005
epoch = 1135465200


Message édité par Emmanuel Delahaye le 25-12-2005 à 23:07:26

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1273199
red factio​n
Posté le 25-12-2005 à 23:03:24  profilanswer
 

[:prosterne] jessaie tout de suite
merci


Message édité par red faction le 25-12-2005 à 23:03:34
n°1297392
tertulia
Posté le 02-02-2006 à 14:33:16  profilanswer
 

ben moi c l'inverse que j'essaie de faire....
j'ai une valeur qui a aussi pour reference le 1 janv 1970 (pourquoi cette date au fait?)
 
et je voudrais trouver la date a laquelle correspond mon chiffre.

Message cité 1 fois
Message édité par tertulia le 02-02-2006 à 15:11:12
mood
Publicité
Posté le 02-02-2006 à 14:33:16  profilanswer
 

n°1297428
skelter
Posté le 02-02-2006 à 15:03:19  profilanswer
 

Emmanuel > ta fonction devrais plutot s'appeler strtounixtime ou strtotime, timetostr c'est plutot l'inverse

n°1297441
tertulia
Posté le 02-02-2006 à 15:09:31  profilanswer
 

je suis aussi d'accord la dessus.
sous windob j'ai bien trouve la fonction ctime qui fait le contraire.
affiche la string a partir du temps (secondes ecoule depuis 1 janv 1970 00:00)
 
mais je voudrais faire ca a la main car la platforme ou je veux le faire a pas les fonctions time... :-(


Message édité par tertulia le 02-02-2006 à 15:11:50
n°1297619
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-02-2006 à 17:15:21  profilanswer
 

skelter a écrit :

Emmanuel > ta fonction devrais plutot s'appeler strtounixtime ou strtotime, timetostr c'est plutot l'inverse


Je suis d'accord, mais ce n'est pas moi qui ai donné le nom original...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1297621
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-02-2006 à 17:16:16  profilanswer
 

tertulia a écrit :

ben moi c l'inverse que j'essaie de faire....
j'ai une valeur qui a aussi pour reference le 1 janv 1970 (pourquoi cette date au fait?)
 
et je voudrais trouver la date a laquelle correspond mon chiffre.


gmtime() ou localtime()
strftime()
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1297629
skelter
Posté le 02-02-2006 à 17:27:35  profilanswer
 

Emmanuel Delahaye a écrit :

Je suis d'accord, mais ce n'est pas moi qui ai donné le nom original...


 
a oui désolé  :)  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  convertir une date vers un entier

 

Sujets relatifs
Parser les résultats de Webalizer vers du XML ?poster vers une page php avec vb
Sélectionnez un champ et être dirigé vers la page choisie[C++] Probleme pour recuperer la date courante
convertir integer en floatcompilateur c vers PIC
Transfert champ texte vers liste multipleconvertir un nombre en chaine de caracteres
export de phpmyadmin vers SQL Servercréer et lire un fichier log avec date
Plus de sujets relatifs à : convertir une date vers un entier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR