网站建设资讯

NEWS

网站建设资讯

c语言函数比较日期的前后 c时间比较函数

c语言 如何输入一个日期,并且比较其与系统日期的早晚?

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;

c语言输入一个日期,计算这个日期前一天和后一天的日期。怎么解答?

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

}

输入日期部分,题主自己写吧。以上是核心代码。

C语言判断两个日期的前后问题

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 的大小即可判定两个日期的关系了。


网站名称:c语言函数比较日期的前后 c时间比较函数
标题路径:http://cdweb.net/article/dooocii.html