日期比较,找出哪个更大的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纳秒间隔差异的指针。