2015年4月30日 计算两个日期天数,写的代码

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <math.h>
  4 #define ISYEAR(year) (year%400==0) ||(year%4==0&&year%100!=0)
  5 int DayofYear(int year, int month, int day);
  6 
  7 
  8 int main(int argc, char *argv[])
  9 {
 10     int year1, month1, day1;
 11     int year2, month2, day2;
 12     int syear = 0,  sday = 0, deltdate = 0;
 13     int date1, date2, date;
 14     int mon1[] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年二月29天
 15     int mon2[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
 16     int i;
 17     printf("输入第一个日期(例如:2010-1-17)");
 18     scanf("%d-%d-%d",&year1, &month1, &day1);
 19     //检查输入的日期是否合法
 20     if(year1<1){
 21         printf("年份非法,重新输入");
 22         scanf("%d-%d-%d",&year1, &month1, &day1);
 23     }
 24     else if(ISYEAR(year1)){
 25         if(month1<1||month1>12){
 26             printf("月份非法,重新输入");
 27             scanf("%d-%d-%d",&year1, &month1, &day1);
 28         }
 29         else{
 30         if(day1 > mon1[month1]||day1<1){
 31             printf("日期非法,重新输入");
 32             scanf("%d-%d-%d",&year1, &month1, &day1);
 33             }
 34         }
 35     }
 36     else {
 37         if(month1<1||month1>12){
 38             printf("月份非法,重新输入");
 39             scanf("%d-%d-%d",&year1, &month1, &day1);
 40             }
 41         else{
 42             if(day1 > mon2[month1]||day1<1){
 43                 printf("日期非法,重新输入");
 44                 scanf("%d-%d-%d",&year1, &month1, &day1);
 45                 }
 46             }
 47         }
 48     //getchar();
 49     printf("输入第二个日期(例如:2015-4-29)");
 50     scanf("%d-%d-%d",&year2, &month2, &day2);
 51     if(year2<1){
 52         printf("年份不合法,请重新输入");
 53         scanf("%d-%d-%d",&year2, &month2, &day2);
 54     }
 55     if(month2<1 || month2>12){
 56         printf("月份不合法,请重新输入");
 57         scanf("%d-%d-%d",&year2, &month2, &day2);
 58     }
 59     if(ISYEAR(year2)){
 60         if(day2>mon1[month2]||day2<1){
 61             printf("日期非法,请重新输入");
 62             scanf("%d-%d-%d",&year2, &month2, &day2);
 63         }
 64     }
 65     else{
 66         if(day2>mon2[month2]||day2<1){
 67             printf("日期非法,请重新输入");
 68             scanf("%d-%d-%d",&year2, &month2, &day2);
 69         }
 70     }
 71 
 72     //分别计算两个日期距离当年1月1日的天数
 73     date1 = DayofYear(year1,month1,day1);
 74     date2 = DayofYear(year2,month2,day2);
 75     //默认year1<year2
 76     if(year1==year2){
 77         if(date1>date2)
 78             deltdate = date1 - date2;
 79         else
 80             deltdate = date2 - date1;
 81     }
 82     else if(year1<year2){
 83         for(i=year1;i<year2;i++){
 84             if(ISYEAR(i))
 85                 syear += 366;
 86             else
 87                 syear += 365;
 88         }
 89         deltdate  = syear - date1 + date2;
 90     }
 91     else{ 
 92         for(i=year1;i>year2;i--){
 93             if(ISYEAR(i))
 94                 syear += 366;
 95             else
 96                 syear += 365;
 97         }
 98         deltdate  = syear - date1 + date2;
 99     }
100 
101     printf("\n%d年%d天%d日距离%d年%d天%d日相隔%d天.\n\n",year2,month2,day2,year1,month1,day1,deltdate);
102     system("pause");
103     return 0;
104 }
105 
106 
107 #define ISYEAR(year) (year%400==0) ||(year%4==0&&year%100!=0)
108 
109 int DayofYear(int year, int month, int day)
110 {
111     int sum = 0;
112     int index = 0;
113     for(index=1;index<month;index++){
114         switch(index){
115         case 1:
116         case 3:
117         case 5:
118         case 7:
119         case 8:
120         case 10:
121         case 12:
122             sum += 31;
123             break;
124         case 2:
125             if(ISYEAR(year)){
126                 sum += 29;
127             }
128             else 
129                 sum +=28;
130             break;
131         case 4:
132         case 6:
133         case 9:
134         case 11:
135             sum += 30;
136             break;
137 
138         }
139     }
140     sum += day;
141     return sum;
142 }

 

posted on 2015-04-30 15:22  IT小不点  阅读(224)  评论(0编辑  收藏  举报