Soustraire 2 dates en unix timestamp
	
	
		Salut a tous, 
voila, j'ai fait un petit script (qui marche pas tres bien  :lol: )
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:
	
| 12
 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:
	
| 12
 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
	 
	
	
	
		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...
	Citation:
	
		
		
			En fait je recupere une date en unix timestamp sur une base Mysql.
Je voudrai soustraire celle ci au unix timestamp actuel.
	Code:
	
| 12
 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: 
 	      printf ("Diff : %lu secondes !\n", (unsigned long) diff);
 
 
	 
	
	
	
		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:
	
| 12
 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: 
 	      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:
	
diff = timestamp - row[25];
 me renvoi tout le temps 
	Code:
	
sql.c:55: error: invalid operands to binary -
 J'ai change l affichage mais aucune modification...
Merci
	 
	
	
	
		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()...
	 
	
	
	
		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:
	
| 12
 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
	 
	
	
	
		Re: Soustraire 2 dates en unix timestamp
	
	
		
	Citation:
	
		
		
			
				Envoyé par MaKKrO
				
			
			Voila ce que j'ai essayer de faire...
	Code:
	
| 12
 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.