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:
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:
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
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:
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:
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:
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:
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:
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
Re: Soustraire 2 dates en unix timestamp
Citation:
Envoyé par MaKKrO
Voila ce que j'ai essayer de faire...
Code:
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.