设计思路
1、比较起始和结束的年份大小,起始年是否大于结束年,如果起始时间大于输入的结束时间,则把两个时间(年月日)互换值,再计算两个时间相差的天数。
2、判断是否起始时间小于结束时间,直接计算两个时间相差的天数。
3、判断是否为闰年。
代码如下
#include <stdio.h>
#include <stdlib.h>
int main()
{
int s_year, s_month, s_day, s_sum = 0;
static int days = 0;
static int day = 0;
int e_year, e_month, e_day, e_sum = 0;
static int leap = 0;
int tmp, tmp1, tmp2;
printf("输入起始时间,格式为:年,月,日(xxxx,xx,xx)\n");
scanf_s("%d,%d,%d", &s_year, &s_month, &s_day);
printf("输入结束时间,格式为:年,月,日(xxxx,xx,xx)\n");
scanf_s("%d,%d,%d", &e_year, &e_month, &e_day);
if (s_year > e_year) //判断哪个年份大,如果起始时间大于结束时间,则互换值
{
tmp = s_year;
s_year = e_year;
e_year = tmp;
tmp1 = s_month;
s_month = e_month;
e_month = tmp1;
tmp2 = s_day;
s_day = e_day;
e_day = tmp2;
}
while (s_year < e_year)
{
if (e_year % 400 == 0 || (e_year % 4 == 0 && e_year % 100 != 0)) /*判断是否为闰年*/
{
days = days + 366; /*闰年*/
}
else
{
days = days + 365; /*平年*/
}
e_year--;
}
switch (s_month)
{
case 1:s_sum = 0;
break;
case 2:s_sum = 31;
break;
case 3:s_sum = 31 + 28;
break;
case 4:s_sum = 31 + 28 + 31;
break;
case 5:s_sum = 31 + 28 + 31 + 30;
break;
case 6:s_sum = 31 + 28 + 31 + 30 + 31;
break;
case 7:s_sum = 31 + 28 + 31 + 30 + 31 + 30;
break;
case 8:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31;
break;
case 9:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
break;
case 10:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
break;
case 11:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
break;
case 12:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
break;
}
s_sum = s_sum + s_day; /*计算起始日期天数*/
switch (e_month)
{
case 1:e_sum = 0;
break;
case 2:e_sum = 31;
break;
case 3:e_sum = 31 + 28;
break;
case 4:e_sum = 31 + 28 + 31;
break;
case 5:e_sum = 31 + 28 + 31 + 30;
break;
case 6:e_sum = 31 + 28 + 31 + 30 + 31;
break;
case 7:e_sum = 31 + 28 + 31 + 30 + 31 + 30;
break;
case 8:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31;
break;
case 9:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
break;
case 10:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
break;
case 11:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
break;
case 12:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
break;
}
if (s_year % 400 == 0 || (s_year % 4 == 0 && s_year % 100 != 0))
{
if (e_month > 2)
{
day++;
}
}
e_sum = e_sum + e_day; /*计算结束日期天数*/
days = days - s_sum + e_sum + day; /*相差的天数*/
printf("起始和结束日期相差了%d天\n", abs(days)); //因天数计算可能会出现负数,abs()函数可把相差的天数变成正数
return 0;
}
运行结果
结果1:结束日期大于初始日期
结果2:初始日期大于结束日期?
?
|