我想知道如何使用C程序查找哪个日期更大。请帮我解决这个问题。
#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;
}
}
if (d1.year == d2.year)
是否多余?因为如果程序执行到这里,你就已经知道年份是相同的了。 - gsamaras#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*2000;
printf("Enter second date (dd/mm/yyyy) => "); scanf("%d/%d/%d", &day2, &month2, &year2);
int prioritedScore2 = day2 + month2*100 + year2*2000;
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;
}
当用户输入像2147484这样的很大的数字时,您可以始终使用长整型来消除可能出现的错误。
您能否提供更多关于您想要实现的内容的信息?因为比较日期真的很容易。毕竟,它们只是自某个过去日期以来的秒数(或毫秒、微秒、纳秒等),或者包含年、月、日等结构。无论格式如何,比较都应该很容易执行。
也许您想要比较用户提供的两个日期字符串(类似于“2011-03-12 18:38”)?那么,您可以使用strptime
将字符串转换为struct tm
,然后进行比较。
#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;
}
你没有说日期的格式是什么,所以我会举两个常见的例子:
如果您正在使用GNU lib-c(或MinGW)并查询时间:
time_t time (time_t *result)
那么time_t
只是一个long int
,自epoch
以来的秒数,您可以从另一个日期中减去一个日期,以找出秒数差异。
如果您正在使用Windows API并具有filetime结构:
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
您可以将指针强制转换为指向ULARGE_INTEGER
的指针,并将其减去,从而得到100纳秒间隔差异的数量。
time_t
是标准C89中的一种类型,因此被MSVC和Unix C编译器支持。虽然有许多不同的亚秒时间结构。 - Jonathan Leffler
sizeof(date1) > sizeof(date2)
可以告诉你哪个更大,或者将日期与我结婚纪念日进行比较,那对我来说是个重要的日子。通常比较日期的方法是早一点还是晚一点,因为大小取决于从哪里开始计算,并不一定有意义。 - Pete Kirkham