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.
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.