【本文原创于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 }
【C语言】 计算任意2个日期之间的天数,布布扣,bubuko.com
时间: 2024-09-29 09:06:11