0
我目前正在製作一個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但我得到一個數組異常錯誤。
這是學習嗎?因爲如果沒有,那裏有許多優秀的庫,例如boost date_time:http://www.boost.org/doc/libs/1_54_0/doc/html/date_time.html – namezero
只需將所有日期轉換爲unix時間戳即可。做減法,然後轉換回來。手冊頁/功能可用。如果這太有限了,那麼得到一個不同的時代,並將其從幾秒鐘減少到幾天。寫功能做同樣的工作 –
這是爲了學習。我知道有Boost庫,事實上我正在使用它來幫助對我的庫進行一些單元測試,並且我還試圖在文檔中查找他們如何減去幾個月的數據,但什麼都沒發現。 – Delete