我目前正在制作一个 C++ 库,该库涉及从公历日期减去月份。我的加月有效,但我的减法公式不起作用并导致错误。这是我的减法公式的代码:
Gregorian operator - ( Gregorian const& dt, detail::packaged_month const& month ) {
year_t yearsToSubtract = month.nMonths_ / 12;
month_t monthsToSubtract = month.nMonths_ % 12;
year_t y = dt.year() - yearsToSubtract;
month_t m = dt.month() - monthsToSubtract;
int adjustment = ( m - 1 ) / 12 + ( m - 12 ) / 12;
y -= adjustment;
m += month_t( adjustment * 12 );
day_t d = std::min( dt.day(), gregorian_days_in_month( m, is_gregorian_leapyear( y ) ) );
return Gregorian( y, m, d );
}
结果应该是,如果我将开始日期设为 2001、2、1 或 2001 年 2 月 1 日和负 4 个月,它应该返回 2000 年 10 月 1 日,但我收到一个数组异常错误。