当前位置:首页 » 编程语言 » 求日期的天数c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

求日期的天数c语言

发布时间: 2022-06-22 02:26:23

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

计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。
要考虑闰年的情况,判断闰年的口诀: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日的天数,然后相减

⑵ 如何用C语言计算日期间离天数

我学C#、Java的,对C不是很了解,仅仅提供个思路:
请问一下C有没有日期函数?有吧应该?
如果有的话,是不是能返回自1970年1月1日起到你输入的日期的毫秒数呢?
能返回的话,你输入的两个时间都换成毫秒数,一减,得到的不就是两个
日期相差的毫秒数?
然后把毫秒数换算成天数不就成了?

⑶ 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;
}

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

直接算两个日期距离公元元年1月1日的天数:

若干个完整的年,若干个完整的月,若干天,加起来之后两个天数相减就行了.

日期的合法性,闰年之类的就不罗嗦了.

⑸ C语言计算两日期间的天数

//用 <time.h> 中的 time_t 和 struct tm 结构体, difftime() 函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

time_t maketime_t(char* date1)
{
struct tm tm0;
char str0[4];

//date1
memset( &tm0, 0, sizeof(tm0));

memset( str0, 0, 4);
strncpy(str0, date1, 4);
tm0.tm_year = atoi(str0) - 1900; //1900

memset( str0, 0, 4);
strncpy(str0, &date1[4], 2);
tm0.tm_mon = atoi(str0) - 1; //0-11

memset( str0, 0, 4);
strncpy(str0, &date1[6], 2);
tm0.tm_mday = atoi(str0); //1-31

return mktime(&tm0);
}

int day_of_day( char *date1, char *date2)
{
struct tm tm0;
char str0[4];
double diff_seconds;

time_t time_t1, time_t2;

time_t1 = maketime_t(date1);
time_t2 = maketime_t(date2);

diff_seconds = difftime(time_t1, time_t2);

return diff_seconds>0?(diff_seconds/3600/24):((-1)*diff_seconds/3600/24);
}

int main()
{
int diff_days;
diff_days = day_of_day("20121214", "20121211");
printf("diff_days=%d\n", diff_days);
return 0;
}

⑹ 急求!C语言计算天数

#include<stdio.h>
int main()
{
int yyyy,mm,dd,a,b;
scanf("%d/%d/%d",&yyyy,&mm,&dd);
a=31*(mm>1)+28*(mm>2)+31*(mm>3)+30*(mm>4)+31*(mm>5)+30*(mm>6)+31*(mm>7)+31*(mm>8)+30*(mm>9)+31*(mm>10)+30*(mm>11)+dd;
b=((yyyy%4==0)*(yyyy%100!=0)+(yyyy%400==0))*(mm>2);
printf("%d\n",a+b);
return 0;
}

⑺ c语言编写程序,输入某年某月,求该月的天数

那就在进入swith语句之前先处理一下,比如先建立两个整形数组预存储闰年和非闰年的每个月的天数,再就是判断一下闰,加上一个判断条件,分入口进入switch语句就可以了。
其实,写程序是“法无定法”,实现方式,多对吗?给你个参考程序,判断一个日期是这一年中那一天。编译环境vc++6.0#include

using
namespace
std;
void
main()
{
int
i;
int
sum=0;
int
year,month,day;
int
rick[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int
conmon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"请输入一个日期,格式:2010
10
10"<
>year>>month>>day;
if((year%4==0&&year%100!=0)||(year%400==0))
{
for(i=0;i

评论
0

0

加载更多

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<time.h>

intget_days(constchar*from,constchar*to);
time_tconvert(intyear,intmonth,intday);

intmain()
{
constchar*from="2013-3-15";
constchar*to="2015-8-14";
intdays=get_days(from,to);

printf("From:%s To:%s ",from,to);
printf("%d ",days);

return0;
}

time_tconvert(intyear,intmonth,intday)
{
structtminfo={0};
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
returnmktime(&info);
}

intget_days(constchar*from,constchar*to)
{
intyear,month,day,fromSecond,toSecond;
sscanf(from,"%d-%d-%d",&year,&month,&day);
fromSecond=(int)convert(year,month,day);
sscanf(to,"%d-%d-%d",&year,&month,&day);
toSecond=(int)convert(year,month,day);
return(toSecond-fromSecond)/24/3600;
}

From:2013-3-15
To:2015-8-14
882
Pressanykeytocontinue

这才算是用了库函数了···

⑼ 用c语言编写一程序,用户输入日期,计算该日是今年的第几天

#include"stdio.h"

#include"stdlib.h"

intmain()

{

intday,month,year,sum,leap;

printf(" pleaseinputyear,month,day ");

scanf("%d,%d,%d",&year,&month,&day);

switch(month)/*先计算某月以前月份的总天数*/

{

case1:sum=0;break;

case2:sum=31;break;

case3:sum=59;break;

case4:sum=90;break;

case5:sum=120;break;

case6:sum=151;break;

case7:sum=181;break;

case8:sum=212;break;

case9:sum=243;break;

case10:sum=273;break;

case11:sum=304;break;

case12:sum=334;break;

default:printf("dataerror ");break;

}

sum=sum+day;/*再加上某天的天数*/

if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/

{

leap=1;

}

else

{

leap=0;

}

if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/

{

sum++;

}

printf("Itisthe%dthday. ",sum);

return0;

}

(9)求日期的天数c语言扩展阅读

C语言输入任意一个日期的年、月、日的值,求出是星期几并输出。

#include<stdio.h>

voidmain()

{

inty,m,d,c,s,w;

printf("请输入8位年月日,以空格隔开:");

scanf("%d%d%d",&y,&m,&d);

if(m==1)c=d;

elseif(m==2)c=31+d;

elseif(m==3)c=31+28+d;

elseif(m==4)c=31+28+31+d;

elseif(m==5)c=31+28+31+30+d;

elseif(m==6)c=31+28+31+30+31+d;

elseif(m==7)c=31+28+31+30+31+30+d;

elseif(m==8)c=31+28+31+30+31+30+31+d;

elseif(m==9)c=31+28+31+30+31+30+31+31+d;

elseif(m==10)c=31+28+31+30+31+30+31+31+30+d;

elseif(m==11)c=31+28+31+30+31+30+31+31+30+31+d;

elseif(m==12)c=31+28+31+30+31+30+31+31+30+31+30+d;

if(m>2)

{if(y%100==0){if(y%400==0)c=c+1;}

elseif(y%4==0)c=c+1;}

s=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+c;

w=s%7;

switch(w)

{

case0:printf("星期日");break;

case1:printf("星期一");break;

case2:printf("星期二");break;

case3:printf("星期三");break;

case4:printf("星期四");break;

case5:printf("星期五");break;

case6:printf("星期六");break;

printf(" ");

}

}

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

#include <time.h>
#include <stdio.h>
void main()
{
tm t1={0},t2={0};
t1.tm_year = 1999-1900;
t1.tm_mon = 2-1;
t1.tm_mday = 3;
t2.tm_year = 2015-1900;
t2.tm_mon = 5-1;
t2.tm_mday = 4;
time_t a1 = mktime(&t1);
time_t a2 = mktime(&t2);
printf("相差%d天", (a2-a1)/86400);
}
ps:看不懂了再追问