首页 > 代码库 > 【C语言】 计算任意2个日期之间的天数
【C语言】 计算任意2个日期之间的天数
【本文原创于Paul的博客园技术博客。】
【本文欢迎转载,转载请以链接形式注明出处。】
【本博客所有文章都经博主精心整理,请尊重我的劳动成果。】
【C语言】 计算任意2个日期之间的天数
1. 要判断时间的合法性(如果不想判断也可以)
2. 判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了
代码如下:
1 /*求所在月份的天数*/ 2 int daysMonth(int year,int month,int day) 3 { 4 5 int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 6 int i,sum=0; 7 for(i=0;i<month;i++) 8 sum+=days[i]; 9 if(month>2) /*如果是闰年则2月加一天*/ 10 if((year%4==0)&&(year%100!=0)||(year%400==0)) 11 sum+=1; 12 sum+=day; 13 return sum; 14 } 15 /*交换位置,避免负值*/ 16 void swap(int x1,int x2) 17 { 18 int tmp=x1; 19 x1=x2; 20 x2=tmp; 21 } 22 long countDate(int y1,int m1,int d1,int y2,int m2,int d2) 23 { 24 int daysyear1,daysyear2; 25 long totalDays=0; 26 int total_day1; 27 int tmpYear; 28 int tmpDays; 29 printf("The first Date is %ld-%ld-%ld/n",y1,m1,d1); 30 printf("The second Date is %ld-%ld-%ld/n",y2,m2,d2); 31 if(y1>y2) 32 { 33 swap(y1,y2); 34 swap(m1,m2); 35 swap(d1,d2); 36 } 37 if(y1==y2) 38 { 39 daysyear1=daysMonth(y1,m1,d1); 40 daysyear2=daysMonth(y2,m2,d2); 41 totalDays=abs(daysyear1-daysyear2)+1; 42 printf("totalDays is %ld/n",totalDays-1); 43 } 44 else 45 { 46 daysyear1=daysMonth(y1,m1,d1); 47 total_day1=365-daysyear1+1; 48 if(m1<=2) 49 if(y1%4==0&&(y1%100!=0)||(y1%400==0)) 50 total_day1+=1; 51 totalDays+=total_day1; 52 tmpYear=y1; 53 while(++tmpYear<y2) 54 { 55 tmpDays=365; 56 if((tmpYear%4==0)&&(tmpYear%100!=0)||(tmpYear%400==0)) 57 tmpDays+=1; 58 totalDays+=tmpDays; 59 } 60 daysyear2=daysMonth(y2,m2,d2); 61 totalDays+=daysyear2; 62 } 63 return totalDays-1; 64 printf("totalDays is %ld/n",totalDays-1); 65 } 66 int main() 67 { 68 int y1,m1,d1,y2,m2,d2; 69 printf("Plsase input Date,for example 2008-8-1,2008-8-8:/n"); 70 scanf("%ld-%ld-%ld,%ld-%ld-%ld",&y1,&m1,&d1,&y2,&m2,&d2); 71 countDate(y1,m1,d1,y2,m2,d2); 72 return 0; 73 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。