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 :

Soustraire 2 dates en unix timestamp


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Par défaut Soustraire 2 dates en unix timestamp
    Salut a tous,
    voila, j'ai fait un petit script (qui marche pas tres bien )
    En fait je recupere une date en unix timestamp sur une base Mysql.
    Je voudrai soustraire celle ci au unix timestamp actuel.

    Je vous met le script :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #include <mysql/mysql.h>
    #include <stdio.h>
    #include <time.h>
     
     
    main() {
     
    	MYSQL *conn;
    	MYSQL_RES *res;
       	MYSQL_ROW row;
    	MYSQL updatesec;
       char *server = "127.0.0.1";
       char *user = "xxx";
       char *password = "xxxxxxx";
       char *database = "xxxxx";
       time_t timestamp,t;
       char diff;
       conn = mysql_init(NULL);
     
     
       /* Connect to database */
       if (!mysql_real_connect(conn, server,
             user, password, database, 0, NULL, 0)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(0);
       }
    	query="select * from radacct where AcctInputOctets != '0' and AcctOutputOctets != '0' and AcctStopTime = '0000-00-00 00:00:00'";
     
     
    while (1)
    {
    	printf("\n --- Waiting 5 Secondes --- \n");
    	sleep (5);
       	   /* send SQL query */
    	   if (mysql_query(conn, "select * from radacct where AcctInputOctets != '0' and AcctOutputOctets != '0' and AcctStopTime = '0000-00-00 00:00:00'")) 
    	   {
    	      fprintf(stderr, "%s\n", mysql_error(conn));
    	      exit(0);
    	   }
    	printf ("SQL Request : %s\n",query);
    	   res = mysql_use_result(conn);
    	   timestamp = time (NULL);
    	   printf ("Current Date in Sec = %i\n",timestamp);
     
    	  while ((row = mysql_fetch_row(res)) != NULL)
    	 {
                 //DEBUG
    	      printf("Username = %s \n", row[3]);
    	      printf ("timestamp = %lu\n",timestamp);
    	      printf ("updatetime = %s\n",row[25]);
    	      diff = timestamp - row[25];
    	      printf ("Diff : %u secondes !\n",diff);
     
    	      // Fin DEBUG
     
    	      if (row[25] < diff)
    	      {
    		      printf ("\nAbout To Update %s from RadAcct\n",row[3]);
    	      }
    	      else
    	      {
    		      printf ("Nobody to Update ! \n");
    	      }
     
    	   }
    	   mysql_free_result(res);
    //}
    }
    }
    Je n'arrive a faire la soustraction, surment a cause des type de variables...

    Voila ce que ca me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Current Date in Sec = 1144847098
    Username = fb2
    timestamp = 1144847098
    updatetime = 1144847075
    Diff : 4294967233 secondes !
    Je comprend pas grand chose... donc si quelqu'un peut m'aider...

    Merci

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Soustraire 2 dates en unix timestamp
    Citation Envoyé par MaKKrO
    voila, j'ai fait un petit script (qui marche pas tres bien)
    Pas de 'script' en C, mais [code ]source...
    En fait je recupere une date en unix timestamp sur une base Mysql.
    Je voudrai soustraire celle ci au unix timestamp actuel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       	MYSQL_ROW row;
     
       time_t timestamp,t;
       char diff;
    	   timestamp = time (NULL);
    	      diff = timestamp - row[25];
    	      printf ("Diff : %u secondes !\n",diff);
    • Quel est le type réel de MYSQL_ROW ?
    • Qui a mis a jour row[25], et comment ?
    • diff devrait être de type time_t
    • l'affichage devrait être du type %lu avec un cast en (unsigned long) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      	      printf ("Diff : %lu secondes !\n", (unsigned long) diff);

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Par défaut Re: Soustraire 2 dates en unix timestamp
    Citation Envoyé par Emmanuel Delahaye
    Pas de 'script' en C, mais [code ]source...
    Ok desole pour le langage...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       	MYSQL_ROW row;
     
       time_t timestamp,t;
       char diff;
    	   timestamp = time (NULL);
    	      diff = timestamp - row[25];
    	      printf ("Diff : %u secondes !\n",diff);
    Citation Envoyé par Emmanuel Delahaye
    • Quel est le type réel de MYSQL_ROW ?
    • Qui a mis a jour row[25], et comment ?
    • diff devrait être de type time_t
    • l'affichage devrait être du type %lu avec un cast en (unsigned long) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      	      printf ("Diff : %lu secondes !\n", (unsigned long) diff);
    - Le type reel de MYSQL ROW... tres bonne question car il contient beaucoup de chose...
    Dans ma base mysql, row[25] est un varchar.

    - le row[25] est un des resultat de ma requete SQL, il contient 1144847075

    Aussi le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diff = timestamp - row[25];
    me renvoi tout le temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.c:55: error: invalid operands to binary -
    J'ai change l affichage mais aucune modification...

    Merci

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Soustraire 2 dates en unix timestamp
    Citation Envoyé par MaKKrO
    - le row[25] est un des resultat de ma requete SQL, il contient 1144847075
    Sous quelle forme ? texte, valeur numérique ?

    Si c'est du texte, il faut d'abord le convertir en unsigned long avec strtoul()...

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Par défaut Re: Soustraire 2 dates en unix timestamp
    Citation Envoyé par Emmanuel Delahaye
    [
    Sous quelle forme ? texte, valeur numérique ?

    Si c'est du texte, il faut d'abord le convertir en unsigned long avec strtoul()...
    Voila ce que j'ai essayer de faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
     unsigned long int updatetime;
     int  base=32;
    ....
     
    updatetime = strtoul(row[25],NULL, base);
    printf ("updatetime 2 = %lu\n",(unsigned long)updatetime);
    Ca me met toujours des resultats bidon...
    help plzzzz

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Soustraire 2 dates en unix timestamp
    Citation Envoyé par MaKKrO
    Voila ce que j'ai essayer de faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
     unsigned long int updatetime;
     int  base=32;
    ....
     
    updatetime = strtoul(row[25],NULL, base);
    printf ("updatetime 2 = %lu\n",(unsigned long)updatetime);
    Ca me met toujours des resultats bidon...
    Pourquoi je ne suis pas surpris ? Il faut cesser de programmer au hasard. Il faut savoit quel est le type C caché derriere SQL_ROW, et quel est le format des données dans row[25]. Qui te dit que c'est du texte en base 32 ?

    C'est à voir avec la doc ou les gens de MySQL. Ca n'a rien à voir avec le langage C.

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Par défaut
    Ba c'est bon, j'ai fait autrement en fait.
    J ai fai le calcul directement dans la requete SQL.

    Merci

    PS : c pas la peine de s'enerver, tout le monde n'a pas le meme "savoir"

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par MaKKrO
    PS : c pas la peine de s'enerver, tout le monde n'a pas le meme "savoir"
    Certes, mais ce n'est pas une excuse pour ne pas réfléchir...

Discussions similaires

  1. Passer de Vb Date à Unix TimeStamp
    Par hwarangouze dans le forum VBScript
    Réponses: 2
    Dernier message: 02/08/2012, 09h50
  2. Date unix timestamp
    Par bahraoui dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 07/10/2011, 14h11
  3. Formater une date via un timestamp UNIX et un modèle modifiable
    Par Aldéhir dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 7
    Dernier message: 11/09/2007, 16h43
  4. Soustraire 2 dates
    Par TheDarkLewis dans le forum C++
    Réponses: 4
    Dernier message: 21/09/2004, 13h05
  5. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53

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