日期比较,找出哪个更大的C

我想知道如何使用ac程序找到哪个更大的日期

请帮助我…

谢谢

你可以使用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; } 

如果您的日期不是time_t类型,则可以使用函数mktime进行转换。

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

您能否提供有关您想要实现的目标的更多信息? 因为比较日期真的很容易。 毕竟,它们只是自给定的过去日期以来的秒数(或毫秒,微米,纳米……),或者包含年,月,日的结构……无论格式如何,比较都应该非常简单去表演。

也许你想比较用户给出的两个日期作为字符串(类似“2011-03-12 18:38”)? 然后,您可以使用strptime将字符串转换为struct tm ,然后进行比较。

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

您没有说明您使用哪种格式的日期,因此我将列举两个常见示例:

  • 如果您正在使用GNU lib-c(或MinGW)并使用以下命令查询时间:

     time_t time(time_t * result)
    

那么time_t只是一个long int ,自epoch以来的秒数,你可以从另一个中减去一个日期来找出差异的秒数。

  • 如果您使用的是Windows API并且具有文件时结构:
 typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
 } FILETIME,* PFILETIME;

你可以将指针ULARGE_INTEGER转换为指向ULARGE_INTEGER的指针,然后减去那个给你100纳秒间隔差异的指针。