首页 > 代码库 > 【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 }