【发布时间】:2025-12-02 22:20:09
【问题描述】:
我正在编写一个简单的日历类。我正在尝试重载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;
【问题讨论】:
-
2012 年 3 月的开始日期是星期四?
-
你说三月的结果是错误的。二月是具有奇怪闰日规则的月份。嗯
-
对不起,我的意思是 2013 年。现在更正...
-
@brian beuning 当我找到月份长度时,我正在纠正闰年。随着它继续前进,它也会变得更远。在四月,它将下个月的开始日期定为星期日,即星期三。