#include<stdio.h>
typedef struct carryMem
{
int *pCarry;
int carry;
int mybit;
int date[6];
}CARRY;
CARRY isCarry(CARRY car);
int isLeapYear(int year);
int calcDays(CARRY car);
int main(void)
{
int i = 0;
int j = 0;
int date[6];
CARRY mainCar;
printf("\t请输入年,月,日,时,分,秒。\n");
printf("\t年份范围1990~2050。\n");
for(i = 0; i < 6;i++)
{
scanf("%d",&date[i]);
}
for(i = 3; i < 6;i++)
{
if (date[i]<0||date[i]>60)
printf("日期格式不对,请重新输入。\n");
}
if (date[0]>2050 || date[0]<1990 || date[1]>12 || date[1]<1 || date[2]<1 || date[2]>31)
printf("日期格式不对,请重新输入。\n");
else if ((isLeapYear(date[0]) && (date[1] == 2) && (date[3] > 29)) || (!isLeapYear(date[0]) && (date[1] == 2) && (date[3] > 28)))
printf("日期格式不对,请重新输入。\n");
else
{
mainCar.pCarry = date;
mainCar.carry = 0;
mainCar.mybit = 5;
for(i = 0; i < 6;i++)
{
mainCar.date[i] = date[i];
}
mainCar = isCarry(mainCar);
for(j = 0;j < 6;j++)
printf("%d ",mainCar.date[j]);
//todo
}
}
//进位处理。
CARRY isCarry(CARRY car)
{
int comp = 0;
switch(car.mybit)
{
case 5: comp = 60;break;
case 4: comp = 60;break;
case 3: comp = 24;break;
case 2: comp = calcDays(car);break;
case 1: comp = 12;break;
case 0: comp = 2050;break;
}
if((car.date[car.mybit] + car.carry + 1) < comp)
{
car.date[car.mybit]++;
return car;
}
else
{
while(((car.date[car.mybit] + car.carry + 1) == comp) && car.mybit > 0)
{
car.date[car.mybit] = 0;
car.carry = 1;
car.mybit--;
isCarry(car);
}
return car;
}
}
//判断year是否是闰年。
int isLeapYear(int year)
{
if ((year/400 == 0))
return 1;
else if ((year/100 != 0) && (year/4 == 0))
return 1;
else return 0;
}
//计算对应月份的天数
int calcDays(CARRY car)
{
if (isLeapYear(car.date[0]) && car.date[1] == 2)
return 29;
else if (!isLeapYear(car.date[0]) && car.date[1] == 2)
return 28;
switch(car.date[1])
{
case 11 :
case 9:
case 6:
case 4: return 30;
break;
default: return 31;
}
}