c使用ctime,具体使用方法搜一下
发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及高空作业车租赁等,在网站建设公司、成都营销网站建设、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。
函数 sturct tm *localtime(const time_t *time)来获得本地时间,使用该函数时,需要加头文件time.h ;
几个常用的时间函数
time()//取得系统时间
gmtime()//转换成国标标准之间
localtime()//转换成本地时间
asctime()//转换成字符形式
ctime()//转换成字符形式
strftime()//类似于printf()
要输入一个日期,可以定义一个结构函数,如:
struct time
{
int year;
int month;
int day;
}time;
#include stdio.h
#include conio.h
/* 日期存储结构 */
typedef struct date {
int year; /* 年 */
int month; /* 月 */
int day; /* 日 */
} date;
int dpm[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; /* 平年每月天数 */
/* 判断闰年 1:是; 0:否 */
/* 闰年特点:年份是4的倍数但不是100的倍数、年份是400的倍数 */
int isLeap (int year) {
return (year%4==0 year%100!=0) || (year%400==0);
}
/* 日期校验 */
/* 日期错误返回1,正确返回0 */
int dateIsErr (date d) {
if (d.year1582 d.month10 d.day15) /* 仅支持1582年10月15日之后的日期计算 */
return 1;
if (d.month 1 || d.month 12) /* 月校验 */
return 1;
if (d.day1 || d.day31) /* 日初步校验 */
return 1;
if (d.month!=2 d.daydpm[d.month]) /* 非2月日校验 */
return 1;
if (d.month==2 isLeap (d.year) d.day29) /* 2月闰年日校验 */
return 1;
if (d.month==2 isLeap (d.year)==0 d.day28) /* 2月平年日校验 */
return 1;
return 0;
}
/* 计算与日期start相差delta天的日期 */
date dateDelta (date start, int delta) {
date end = start;
if (delta=0) { /* 日期start向后计算 */
end.day = start.day + delta; /* start日加intervalDays天 */
while (end.day dpm[end.month]) { /* 不断减去整月天数,向月、年进位,直至其不超过当前月份天数 */
end.day -= dpm[end.month];
if (isLeap (end.year) end.month==2) /* 闰年2月天数-1 */
end.day--;
end.month++; /* 月进位+1 */
if (end.month == 13) { /* 满1年 */
end.year++; /* 年进位+1 */
end.month = 1; /* 月归位至1月 */
}
}
}
else { /* 日期start向前计算 */
end.day = start.day + delta; /* start日加intervalDays天 */
while (end.day 1) { /* 不断加整月天数,向月、年借位,直至其不小于1 */
end.month--; /* 月借位-1 */
if (end.month == 0) { /* 向年借位 */
end.year--; /* 年借位-1 */
end.month = 12; /* 月归位至12月 */
}
end.day += dpm[end.month];
if (isLeap (end.year) end.month==2) /* 闰年2月天数+1 */
end.day++;
}
}
return end;
}
int main (void) {
date start = {2008,5,6}, end;
int delta;
if (dateIsErr (start)) {
printf ("日期错误!\n");
}
else {
printf ("\t%4d年%2d月%2d日\n", start.year, start.month, start.day);
delta = 1;
end = dateDelta (start, delta);
printf ("向后\t1天\n");
printf ("是\t%4d年%2d月%2d日\n", end.year, end.month, end.day);
delta = -1;
end = dateDelta (start, delta);
printf ("向前\t1天\n");
printf ("是\t%4d年%2d月%2d日\n", end.year, end.month, end.day);
}
getch (); /*屏幕暂留*/
return 0;
}
输入日期部分,题主自己写吧。以上是核心代码。
if(dt1.year!=dt2.year)
{
if(dt1.yeardt2.year) return 1; //判断年相等否
if(dt1.yeardt2.year) return -1;
}
比如这里,如果两个year相等,就没有返值(当然,这是编译器的判断逻辑),编译器不会根据你上下文去统计逻辑的,因此会认为你if有返值,没有else语句中的返值。你将两个逻辑中的连续if改成if else应该就没问题了。
其实,如果年月日的规则是严格的,那么语句不用这么麻烦,直接判断
year*365+month*30+day 的大小即可判定两个日期的关系了。