在我们正在做的铁路项目的删除超时文件的功能中,需要作出超时逻辑来判断遍历到的文件是否为超时文件,从而需要计算距离系统时间N天前的日期。查找资料和改编之后实现了这个小目标。
class Date
{
private:
int year, month, day;
void DecDay(); //日期减少一天函数
public:
Date(int y, int m, int d) : year(y), month(m), day(d) {};
bool IsLeapYear(); //是否闰年
Date& DecDays(int days) //减去任意天数
{
for (int i = 0; i < days; i++) //减少任意天数 定义成了内联函数
{
DecDay();
}
return *this;
}
bool IsFirstofMonth(); //判断是否到了月初
int y() const { return year; };
int m() const { return month; };
int d() const { return day; };
};
bool Date::IsLeapYear() //判断是否为闰年
{
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
void Date::DecDay() //减少一天
{
if (IsFirstofMonth()) //判断是否是年初,月初
{
switch (month - 1)
{
case 0:
day = 31; month = 12; year--; //判断是否为年初
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
day = 31; month--;
break;
case 4:
case 6:
case 9:
case 11:
day = 30; month--;
break;
case 2:
if (IsLeapYear())
{
day = 29; month--;
break;
}
else
{
day = 28; month--;
break;
}
}
}
else
day--;
}
bool Date::IsFirstofMonth() //判断是否为月初
{
if (day == 1)
return 1;
else
return 0;
}
“`
一天一天的往回返,是一个很清晰的思路。