Utilisation de Difftime() avec des dates en string

Résolu
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

3 réponses

  1. 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()
    1. 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"
      1. Si ce n'est que ça tu peux l'écrire toi même. Quelque chose du genre :

        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;
        }
        
      2. 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
      3. 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; 
        }