convertir une date vers un entier

convertir une date vers un entier - C - Programmation

Marsh Posté le 25-12-2005 à 21:49:22    

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)

Reply

Marsh Posté le 25-12-2005 à 21:49:22   

Reply

Marsh Posté le 25-12-2005 à 22:14:57    

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/
Reply

Marsh Posté le 25-12-2005 à 22:19:20    

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

Reply

Marsh Posté le 25-12-2005 à 22:22:37    

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/
Reply

Marsh Posté le 25-12-2005 à 22:25:41    

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

Reply

Marsh Posté le 25-12-2005 à 22:27:22    

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/
Reply

Marsh Posté le 25-12-2005 à 22:44:09    

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

Reply

Marsh Posté le 25-12-2005 à 23:01:49    

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/
Reply

Marsh Posté le 25-12-2005 à 23:03:24    

[:prosterne] jessaie tout de suite
merci


Message édité par red faction le 25-12-2005 à 23:03:34
Reply

Marsh Posté le 02-02-2006 à 14:33:16    

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
Reply

Marsh Posté le 02-02-2006 à 14:33:16   

Reply

Marsh Posté le 02-02-2006 à 15:03:19    

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

Reply

Marsh Posté le 02-02-2006 à 15:09:31    

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
Reply

Marsh Posté le 02-02-2006 à 17:15:21    

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/
Reply

Marsh Posté le 02-02-2006 à 17:16:16    

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/
Reply

Marsh Posté le 02-02-2006 à 17:27:35    

Emmanuel Delahaye a écrit :

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


 
a oui désolé  :)  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed