Comparación de fechas para encontrar cuál es más grande en C

Quiero saber cómo encontrar la fecha más grande usando el progtwig de CA

por favor me ayude por favor …

Gracias

Puedes usar la función difftime :

 #include  #include  int main(void) { time_t date1, date2; // initialize date1 and date2... double seconds = difftime(date1, date2); if (seconds > 0) { printf("Date1 > Date2\n"); } return 0; } 

Si sus fechas no son del tipo time_t , puede usar la función mktime para convertirlas.

 #include  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.monthd2.month) return 1; else if (d1.dayd2.day) return 1; else return 0; } } 

¿Puedes dar más información sobre lo que quieres lograr? Porque comparar fechas es realmente fácil. Después de todo, son solo un número de segundos (o mili, micro, nano, …) desde una fecha pasada dada, o una estructura que contiene año, mes, día … Sea cual sea el formato, la comparación debería ser bastante fácil. actuar.

¿Quizás quieras comparar dos fechas dadas por el usuario como cadenas (algo como “2011-03-12 18:38”)? Luego, puede usar strptime para convertir la cadena a una struct tm , y luego hacer la comparación.

 #include  #include  #include  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; } 

No dijo en qué formato tiene la fecha, por lo que nombraré dos ejemplos comunes:

  • Si está utilizando GNU lib-c (o MinGW) y consulta la hora con:

     time_t time (time_t * resultado)
    

Entonces time_t es solo un long int , cantidad de segundos desde la epoch y puedes restar una fecha de la otra para averiguar la diferencia de la cantidad de segundos.

  • Si está utilizando la API de Windows y tiene una estructura de filetime:
 typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
 } FILETIME, * PFILETIME;

puede ULARGE_INTEGER el puntero a un puntero a ULARGE_INTEGER y restar aquel que le da la diferencia de intervalos de 100 nanosegundos.