9
votes

Date de comparaison à trouver qui est plus grand en c

Je veux savoir comment constater quelle est la plus grande date à l'aide d'un programme C

aidez-moi à m'aider ....

merci

c

2 commentaires

Comment les dates sont-elles fournies?


Comparaison Tailleof (Date1)> Tailleof (Date2) vous dit qui est plus gros, ou éventuellement comparer la date à mon anniversaire de mariage, qui était une grande date pour moi? Plus tôt / plus tard est la manière habituelle de comparer les dates, car la magnitude dépend de l'endroit où vous comptez, et n'est pas nécessairement significatif.


5 Réponses :


0
votes

Vous n'avez pas dit dans quel format vous avez la date, je nomme deux exemples communs:

  • Si vous utilisez GNU LIB-C (ou MINGW) et interrogez le temps avec: P>

    typedef struct _FILETIME {
        DWORD dwLowDateTime;
        DWORD dwHighDateTime;
    } FILETIME, *PFILETIME;
    


4 commentaires

TIME_T est également valable sur les compilateurs Windows. Votre réponse m'a confondu en pensant qu'il n'était pas disponible dans les compilateurs Visual C ++ ...


@RUBENVB OUI. Ce ne sont que des exemples.


TIME_T est un type de standard C89 et est donc pris en charge par MSVC ainsi que par les compilateurs UNIX C. Il existe cependant de nombreuses structures de la sous-deuxième fois.


En effet. Ce ne sont que des exemples. Nous devons juste attendre que OP pour enfin nous dire comment il a interrogé la date; Il nous dira probablement qu'il utilise une chaîne contenant la date du calendrier maya codé dans les chiffres romains :-)



15
votes

Vous pouvez utiliser le diff terrice fonction: xxx

Si vos dates ne sont pas de type time_t , vous pouvez utiliser la fonction mktime pour les convertir.


0 commentaires

3
votes
#include <stdio.h>

struct date 
{
   int month;
   int date;
   int year;
};


int main(void)
{
    int i=compare_dates (struct date d1, struct date d2);
    switch(i)
    {
       case -1:
         printf("%d/%d/%d is earlear date than %d/%d %d", D1.day, D1.month, D1.year, D2.day
       case 1: 
         printf("%d/%d/%d is later date than %d/%d/%d",D1.day,D1.month,D1.year,D2.day…
       case 0: 
         printf("%d/%d/%d is the same date than %d/%d/%d", D1.day, D1.month, D1.year, D2.day
     }
   return 0;
}


int compare_dates (struct date d1, struct date d2)
{
    if (d1.year < d2.year)
       return -1;

    else if (d1.year > d2.year)
       return 1;

    if (d1.year == d2.year)
    {
         if (d1.month<d2.month)
              return -1;
         else if (d1.month>d2.month)
              return 1;
         else if (d1.day<d2.day)
              return -1;
         else if(d1.day>d2.day)
              return 1;
         else
              return 0;
    }
}

2 commentaires

si (d1.year = d2.year) devrait avoir == je pense :-)


N'est-ce pas ce si (d1.year == d2.year) redondant, car si vous atteignez ce point de la fonction, vous saurez que l'année est la même?



0
votes

Pouvez-vous donner plus d'informations sur ce que vous voulez réaliser? Parce que la date de comparaison est vraiment facile. Après tout, ils ne sont que du moins de secondes (ou milli, micro, nano, ...) depuis une date passée donnée ou une structure contenant une année, un mois, une journée, ... quel que soit le format, la comparaison doit être assez facile. Pour effectuer.

Peut-être que vous souhaitez comparer deux date données par l'utilisateur comme chaînes (quelque chose comme "2011-03-12 18:38")? Ensuite, vous pouvez utiliser STRATTIME code> pour convertir la chaîne en un struct tm code>, puis effectuez la comparaison. P>

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int parse_date(char* date, struct tm* tm)
{
    char* format;
    char* formats[] = {
        "%F %I", /* "2011-03-12 06:38:05 AM" */
        "%F %T", /* "2011-03-12 18:38:05" */
        "%F %R", /* "2011-03-12 18:38" */
        NULL,
    };

    for (format = formats[0]; format; ++ format) {
        if (strptime(date, format, &tm)) {
            return 1;
        }
    }

    return 0;
}

int main(int argc, char** argv)
{
    float diff;

    char* date1;
    char* date2;

    struct tm tm1;
    struct tm tm2;

    time_t time1;
    time_t time2;

    if (argc != 3) {
        fprintf(stderr, "usage: compare-date date1 date2\n");
        exit(1);
    }

    date1 = argv[1];
    date2 = argv[2];

    if (!parse_date(date1, &tm1)) {
        fprintf(stderr, "unsupported date: %s\n", date1);
        exit(1);
    }

    if (!parse_date(date2, &tm1)) {
        fprintf(stderr, "unsupported date: %s\n", date2);
        exit(1);
    }

    time1 = mktime(&tm1);
    time2 = mktime(&tm2);
    diff = difftime(time1, time2);

    printf("%s %c %s\n",
        date1,
        (diff < 0 ? '<' : (diff > 0 ? '>' : '==')),
        date2);

    return 0;
}


0 commentaires

1
votes

Si vous voulez juste savoir ce qui est plus grand, vous n'avez pas besoin de passer à travers tout cela. Vous pouvez simplement donner la priorité aux valeurs et les comparer. Il suffit d'ajouter des coefficients au mois et en année plus grande que la plus haute journée possible. Par exemple, disons qu'un mois est 100 fois plus important que le jour et une année est de 1 000 fois plus important qu'un jour. Calculez simplement le score des dates et comparez-les.

#include <stdio.h>

int main()
{
    int day1, day2, month1, month2, year1, year2;

    printf("Enter first date (dd/mm/yyyy) => "); scanf("%d/%d/%d", &day1, &month1, &year1);
    int prioritedScore1 = day1 + month1*100 + year1*1000;
    printf("Enter second date (dd/mm/yyyy) => "); scanf("%d/%d/%d", &day2, &month2, &year2);
    int prioritedScore2 = day2 + month2*100 + year2*1000;

    if(prioritedScore1 > prioritedScore2){
        printf("Bigger date is => %d/%d/%d", day1, month1, year1);
    } else if(prioritedScore2 > prioritedScore1){
        printf("Bigger date is => %d/%d/%d", day2, month2, year2);
    } else{
        printf("Dates are same.");
    }

    return 0;
}


0 commentaires