C语言求两个日期相差的天数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言求两个日期相差的天数相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
int leap_year( int );
int year_days( int );
int days(int,int,int);

int leap_year( int year ) // 判断闰年或平年
return ( (year%4==0 && year%100!=0) || year%400==0 ) ? 1 : 0;


int year_days(int year) // 计算一整年的天数
return leap_year( year ) ? 366 : 365;


int days( int year, int month, int day ) // 计算该天month,day 是本年year的第几天
int months[13] = 0,31,28,31,30,31,30,31,31,30,31,30,31, i;

if ( leap_year( year ) && month >2 )
day++;

for ( i=1; i<month; i++ )
day += months[i];

return day;

int main()

int year1,month1,day1,year2,month2,day2,t,p,k,i;
scanf("%d%d%d",&year1,&month1,&day1);
scanf("%d%d%d",&year2,&month2,&day2);
p=365*(year2-year1);
for(i=1;i<(year2-year1);i++)

k=year1;
if(leap_year(k)==1)p++;k++;

t=days(year2,month2,day2)-days(year1,month1,day1)+p;
if(t==1)printf("1 day\n");
else printf("%d days\n",t);

不知道哪错了,求指点T^T

计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。
要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
网上找了一个(偷懒= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)

unsigned char x[13]=0,31,28,31,30,31,30,31,31,30,31,30,31;
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//闰年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天数
s+=d;//日的天数
return s;//返回总天数,相对公元1年

void main()

unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("输入第一个年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("输入第二个年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天数:%ld\n",s1-s2);
else
printf("相差天数:%ld\n",s2-s1);

以上代码VC6编译测试通过。
虽然这个思路显得有些笨,但是其它算法,代码太长太复杂,要考虑多种情况,不如直接算两个日期距离公元元年1月1日的天数,然后相减
参考技术A

你好!

   你的程序运行正常的,是不是你输入数据的时候格式有问题

   

参考技术B for循环里面k始终是year1。本回答被提问者采纳

C语言中 求两个日期间的天数

想知道C语言中是否提供这样的函数,求出两个日期之间的天数?

如果没有现成的函数能用,想知道如何写代码实现这个功能?
请赐教,谢谢。
这怎么能直接相减 ,年份要判断一下吧,月份也要判断吧

以前做的C语言实习作业......
要把年、月、日分开来求...

#include <stdio.h>

int mon[12]=31,28,31,30,31,30,31,31,30,31,30,31; /*储存12个月的天数*/
void main()

int spec_year(int);
void scan(int *year,int *month,int *day);
long com_year(int y1,int y2);
int com_month(int y1,int m1,int y2,int m2);
int com_day(int y1,int m1,int d1,int y2,int m2,int d2);

int year1,month1,day1;
int year2,month2,day2;

long sum=0;
int k=0;

/*输入两个日期,做合法性检查*/
printf("Enter the first date,like 1988 11 30:");
scan(&year1,&month1,&day1);
printf("Enter the second date,like 1988 11 30:");
scan(&year2,&month2,&day2);

/*当输入的第一个日期比第二个日期大时,将二者对换*/
if((year1>year2)||((year1==year2)&&(month1>month2))||((year1==year2)&&(month1==month2)&&(day1>day2)))

int temp;
temp=year1;year1=year2;year2=temp;
temp=month1;month1=month2;month2=temp;
temp=day1;day1=day2;day2=temp;


/*计算两个日期之间的天数*/
sum+=com_year(year1,year2); /*计算两个年份之间的天数*/
sum+=com_month(year1,month1,year2,month2); /*计算两个月份之间的天数*/
sum+=com_day(year1,month1,day1,year2,month2,day2); /*计算两天之间的天数*/

/*输出*/
printf("There are %ld days between them.\n",sum);


void scan(int *year,int *month,int *day) /*输入日期函数,合法性判断*/

int k=0;
do

if(k!=0)
printf("\nWrong date!\n");
k++;
/*printf("Please write down the day,like 1988 11 30:");*/
scanf("%d%d%d",year,month,day);
if(spec_year(*year))
mon[1]=29;
while(*day>mon[*month-1]||*month>13||*year<1900||*year>3000);
mon[1]=28;


long com_year(int y1,int y2) /*计算两个年份之间的天数*/

int i;
long sum=0;
for(i=y1+1;i<y2;i++)

if(spec_year(i))
sum+=366;
else
sum+=365;

return sum;


int com_month(int y1,int m1,int y2,int m2) /*计算两个月份之间的天数*/

int i;
int sum=0;
if(y1!=y2)

if(spec_year(y1))

mon[1]=29;

if(m1!=m2)

for(i=m1;i<12;i++)

sum+=mon[i];

mon[1]=28;

if(spec_year(y2))

mon[1]=29;


for(i=0;i<m2-1;i++)

sum+=mon[i];

mon[1]=28;

else

for(i=m1-1;i<12;i++)

sum+=mon[i];

mon[1]=28;

if(spec_year(y2))

mon[1]=29;


for(i=0;i<m2-1;i++)

sum+=mon[i];

mon[1]=28;


else

if(spec_year(y1))

mon[1]=29;

for(i=m1;i<m2-1;i++)

sum+=mon[i];

mon[1]=28;

return sum;


int com_day(int y1,int m1,int d1,int y2,int m2,int d2) /*计算两天之间的天数*/

int i;
int sum=0;

if(m1!=m2)

if(spec_year(y1))

mon[1]=29;


sum+=(mon[m1-1]-d1);

sum+=d2;

mon[1]=28;

else

sum+=d2-d1;



return sum;


int spec_year(int year) /*判断是否为闰年*/

if((year%400==0)||((year%4==0)&&(year%100!=0)))
return 1;
else
return 0;
参考技术A 不记得有类似的库函数,应该相减就能出结果。如果返回值不是 int 型就加个强制类型转换,应该很容易。

呵呵,我记错了。抱歉。C 语言没有日期变量。

这样的话,就八仙过海,各显其能了。楼下已经给出不少代码了,我就不现丑了。

以上是关于C语言求两个日期相差的天数的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 求两个日期间的天数

c语言 用库函数计算两日期相差的天数

c语言两日期相差天数

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

用c语言编写计算两个日期之间的天数

SQL是计算两个日期相差多少天数的函数?