Utilisation de Difftime() avec des dates en string
Résolu/Fermé
Bonjour,
Je développe un programme en C et j'utilise des API qui me permettent de récuperer des dates au formats string "26-02-2013".
Je souhaiterais faire une comparaison de deux dates de ce format mais je ne trouve pas comment faire avec time.h
Auriez vous une solution ?
Cordialement
Je développe un programme en C et j'utilise des API qui me permettent de récuperer des dates au formats string "26-02-2013".
Je souhaiterais faire une comparaison de deux dates de ce format mais je ne trouve pas comment faire avec time.h
Auriez vous une solution ?
Cordialement
A voir également:
- Utilisation de Difftime() avec des dates en string
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Nombre de jours entre deux dates excel - Guide
- Impossible d'utiliser ce numéro de téléphone pour la validation. - Forum Gmail
3 réponses
Solution : Vu que personne ne sait comment faire (même sur les forums anglais je n'ai pas trouvé de cas similaires), j'ai reformaté la date pour l'obtenir sous le format AAAA-MM-DD et j'ai utilisé un Strcmp()
Utilisateur anonyme
4 mars 2013 à 19:08
4 mars 2013 à 19:08
Il y a différentes fonctions qui peuvent t'aider :
https://man7.org/linux/man-pages/man3/strptime.3.html
https://man7.org/linux/man-pages/man3/strftime.3.html
https://linux.die.net/man/3/mktime
https://man7.org/linux/man-pages/man3/strptime.3.html
https://man7.org/linux/man-pages/man3/strftime.3.html
https://linux.die.net/man/3/mktime
Merci mais cela fonctionne avec des mois sous forme d'entiers. A priori je n'ai pas trouvé comment faire avec des mois sous forme "Mar", "Apr", "Dec"
Si ce n'est que ça tu peux l'écrire toi même. Quelque chose du genre :
Et un exemple d'utilisation :
char* get_month(int n) { if (n < 0 || n > 12) return NULL; char *month = (char*)malloc(3 * sizeof(char)); switch (n) { case 1: sprintf(month,"Jan"); break; case 2: sprintf(month,"Feb"); break; case 3: sprintf(month,"Mar"); break; case 4: sprintf(month,"Apr"); break; case 5: sprintf(month,"May"); break; case 6: sprintf(month,"Jun"); break; case 7: sprintf(month,"Jul"); break; case 8: sprintf(month,"Aug"); break; case 9: sprintf(month,"Sep"); break; case 10: sprintf(month,"Oct"); break; case 11: sprintf(month,"Nov"); break; case 12: sprintf(month,"Dec"); break; } return month; }
Et un exemple d'utilisation :
int main() { char *p; if ((p = get_month(1)) != NULL) printf("%s\n", p); // Affiche "Jan" else // Traiter l'erreur return 0; }
Merci pour ce code et cet exemple. Cependant, ce n'est pas ca qui m'interesse mais bien l'inverse. Je m'explique :
J'obtiens une date "20-Mar-13 09:35" et une autre "26-Feb-13 10:44". Je souhaite faire la différence entre ces deux dates (uniquement pour savoir si celle ci est positive ou négative).
J'avais donc pensé à utiliser DIFFTIME(), mais il me faut des dates au format time_t....
Peut être qu'une solution du genre fonctionnerait ?
1- Extraire par rapport à la position dans la chaine de caractere : var1=20 var2=Mar var3 =13
2- A partir d'un tableau : char[] = "Jan", "Feb", "Mar", ....... faire une recherche "LIKE" avec var2 et en deduire l'indice qui correspondra au mois
3- Récuperer la date sous format var1+indicemois+var3
4- Utiliser une structure pour obtenir un time_t pour faire le Difftime()
Dans d'autres langages j'aurais su le faire mais la en C je ne suis pas certain du tout...
Merci d'avance
J'obtiens une date "20-Mar-13 09:35" et une autre "26-Feb-13 10:44". Je souhaite faire la différence entre ces deux dates (uniquement pour savoir si celle ci est positive ou négative).
J'avais donc pensé à utiliser DIFFTIME(), mais il me faut des dates au format time_t....
Peut être qu'une solution du genre fonctionnerait ?
1- Extraire par rapport à la position dans la chaine de caractere : var1=20 var2=Mar var3 =13
2- A partir d'un tableau : char[] = "Jan", "Feb", "Mar", ....... faire une recherche "LIKE" avec var2 et en deduire l'indice qui correspondra au mois
3- Récuperer la date sous format var1+indicemois+var3
4- Utiliser une structure pour obtenir un time_t pour faire le Difftime()
Dans d'autres langages j'aurais su le faire mais la en C je ne suis pas certain du tout...
Merci d'avance
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 5/03/2013 à 09:12
Modifié par Hxyp le 5/03/2013 à 09:12
Attention lors du malloc, sprintf ajoute le caractère de fin de chaine '\0' ce qui donne 4 char ne pas oublié de free. Ce serait moins galère d'utiliser un tableau pour stocker les mois à la place du switch ça fait moins de code répétitif :
char *get_month(unsigned int n){ char *p,month[12][4]={ "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" }; if(n<12){ p=malloc(sizeof(char)*4); strcpy(p,month[n]); return p; } return NULL; }