我正在写一个简单的日历类。我试图超载operator++
使用它将日历移动到下个月。但是,我找到下个月开始日的算法并不完全正确。
calendar calendar::operator ++(int)
{
int hold;
calendar cal = *this;
month++;
if (month > December)
{
month = January;
year++;
if (year == 0)
year++;
}
previousStartDay = startDay;
startDay = nextStartDay;
nextStartDay = findNextStartDay();
return cal;
}
int calendar::findNextStartDay() const
{
int monthLength,
day = startDay;
monthLength = findMonthLength(false);
monthLength -= 28;
day += monthLength;
if (day > Saturday)
day -= Saturday;
return day;
}
一月定义为0,十二月为11,周日为0,周六为6。 startDay、previousStartDay、nextStartDay、month、year都是私有类变量
当我在 2013 年对此进行测试时,日期在 3 月之前都是正确的。此时它将下一个开始日设为星期二而不是星期一。
我也试过这个:
int calendar::findNextStartDay() const
{
int monthLength,
day = startDay;
monthLength = findMonthLength(false);
monthLength -= 28;
day -= monthLength;
if (day < Sunday)
day += Saturday;
return day;
}
但是,它也给出了相同的结果。
编辑:
我计算的是闰年。这是我的代码,findMonthLength()
用于确定是否存在。
if ((!(year % 4) && (year % 100)) || !(year % 400))
monthLength = 29;
else
monthLength = 28;