//总结 日期转换为天数,天数转换为日期的两个函数,以后遇到此类问题,可以往这两个函数上靠
int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,31,30,31,30,31}};
int Date::leap(int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1; // 是闰年
else return 0;// 不是闰年
}
int Date::dton(Date &d) //将Date类的 日期 转换为从0年0月0日起的天数
{
int y,m,days=0;
for(y=1;y<=d.year;y++)
{
if(leap(y))
days+=366;
else
days+=365;
}
for(m=0;m<=d.month;m++)
{
if(leap(d.year))
days+=day_tab[1][m];
else
days+=day_tab[0][m]; }
days+=d.day;
return days;
}
Date Date::ntod(int n) //输入一个天数,转换为从0年0月0日起加上这个天数得到的日期
{
int y=1,m=1,d,rest=n,lp;
while(1)
{
if(leap(y))
{
if(rest<=366) break;
else rest-=366;
}
else
{
if(rest<=365) break;
else rest-=365;
}
y++;
} y--;
lp=leap(y);
while(1)
{
if(lp)
{
if(rest>day_tab[1][m-1])
rest-=day_tab[1][m-1];
else break;
}
else
{
if(rest>day_tab[0][m-1])
rest-=day_tab[0][m-1];
else break;
}
m++;
}
d=rest;
return Date(y,m,d);
}