Bonjour,

J'essaye de convertir une string sous un format date : "2017-05-02 14:04:18" en time_t pour pouvoir le comparer avec la date actuelle et voir si plus de X ( = MAX_DAY_REFRESH ) se sont passés. Le problème c'est que pour changer la string time_t je la change d'abord en struc tm grâce a la fonction mktime ce qui produit une erreur. Voici mon code:
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
static int compare_date(char* date)
{
    int res = 0;
 
    struct tm tm;
    time_t time_value, now;
    double diff_t;
    char buff[MIN_SIZE];
    int a, m, j, h, min, s;
 
    sscanf(date, "%d-%d-%d %d:%d:%d", &a, &m, &j, &h, &min, &s);
    printf("compare_date : %d-%d-%d %d:%d:%d \n", a, m, j, h, min, s);
    tm.tm_year = a;
    tm.tm_mon = m;
    tm.tm_mday = j;
    tm.tm_hour = h;
    tm.tm_min = min;
    tm.tm_sec = s;
    tm.tm_isdst = -1;
    time_value = mktime(&tm); //mktime retourne -1
    now = time(NULL);
 
    printf("time_value : %f \n", (double) time_value);
    printf("now : %f \n", (double) now);
    diff_t = difftime(now, time_value);
    printf("compare_date diff_t : %f \n", diff_t);
    double time_refresh = MAX_DAY_REFRESH * 24 * 60 *60; //convertion en seconde
    if(time_refresh > diff_t)
    {
        res = 0;
    }
    else
    {
        res = 1;
    }
    return res;
}
En retour j'ai :
compare_date : 2017-5-2 14:4:18
mktime() :: invalid argument
now : ... (un nombre)
compare_date diff_t : 0.0000

Je comprends bien que l'erreur viens de ma struc tm et de comment je la remplie, mais je ne vois pas comment faire autrement ...

Merci d'avance pour toute aide