3 réponses
Utilisateur anonyme
Modifié par le père. le 2/05/2013 à 13:47
Modifié par le père. le 2/05/2013 à 13:47
Bonjour
au finale on a toujours date1>date2
Non, c'est faux. Tu l'as dit toi-même : tes variables sont des chaînes, et strcmp les compare suivant l'ordre alphabétique.
Même si dans ta tête, ces chaînes représentent des dates, C++ n'a aucune raison de le deviner.
Tu peux facilement faire une fonction de comparaison en décomposant tes dates en année, mois et jours séparés pour faire des tests sur chacun.
Mais la meilleure solution serait probablement d'utiliser un type adapté (time_t ou autre, je ne suis pas spécialiste du C++).
au finale on a toujours date1>date2
Non, c'est faux. Tu l'as dit toi-même : tes variables sont des chaînes, et strcmp les compare suivant l'ordre alphabétique.
Même si dans ta tête, ces chaînes représentent des dates, C++ n'a aucune raison de le deviner.
Tu peux facilement faire une fonction de comparaison en décomposant tes dates en année, mois et jours séparés pour faire des tests sur chacun.
Mais la meilleure solution serait probablement d'utiliser un type adapté (time_t ou autre, je ne suis pas spécialiste du C++).
Utilisateur anonyme
2 mai 2013 à 16:17
2 mai 2013 à 16:17
Si ça te retourne -1, c'est que tu ne passes pas les bonnes valeurs.
Peut-on voir le code qui prépare les données et appelle mktime ?
Peut-on voir le code qui prépare les données et appelle mktime ?
struct tm date1, date2; DATE_string_to_date("15-08-2013 14:58:00","%d-%m-%Y %H:%M:%s",&date1.tm_mon,&date1.tm_mday, &date1.tm_year,&date1.tm_hour,&date1.tm_min,&date1.tm_sec); DATE_string_to_date("16-08-2013 14:58:00","%d-%m-%Y %H:%M:%s",&date2.tm_mon,&date2.tm_mday, &date2.tm_year,&date2.tm_hour,&date2.tm_min,&date2.tm_sec);
Ici la fonction DATE_string_to_date est tirée d'une API. Et le problème ne vient pas de là car avec l'espion, j'observe bien que ma structure est correctement initialisée
difftime(mktime(&date2), mktime(&date1));
J'ai vu sur certains forums que des gens enlevaient -1900 à l'année mais je ne vois pas le rapport...
Merci pour ton aide
khrogos
Messages postés
49
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
10 juillet 2013
21
2 mai 2013 à 16:43
2 mai 2013 à 16:43
ça peut aider : en stockant tes dates dans le format AAAA-MM-JJ tu te retrouve avec des chaines de caractères que tu peux comparer avec strcmp ;-)
"2013-12-02" > "2013-08-15"
"2013-12-02" > "2013-12-01"
https://xkcd.com/1179/
"2013-12-02" > "2013-08-15"
"2013-12-02" > "2013-12-01"
https://xkcd.com/1179/
2 mai 2013 à 15:41
EN effet, c'est alphabétique et donc rien à voir avec des dates ... Mais j'étais persuadé que cela fonctionnait car j'avais fait plein d'essais, mais pas avec les bonnes valeurs à priori...
Je me suis donc réorienté vers un difftime().
Et pour créer un time_t j'ai utilisé un maketime mais il me renvoi toujours -1, donc c'est que ça ne lui plait pas. Mais quand je regarde mon date_t, tous les attributs semblent OK.
(ex : date1.tm_hour=10, etc....) mais le maketime renvoie toujours -1 quelque soit la date.
Je suis dans une impasse