如果使用months,当日期是28号-31号时增减月份,可能会导致问题。
可以使用month_iterator可以解决这个问题。详见下面的例子。
- void test_month_iterator()
- {
- using namespace boost::gregorian;
-
- date d(2010, 11, 29);
- d += months(1);
- assert(d == date(2010, 12, 29));
- d += months(1);
- assert(d == date(2011, 1, 29));
- d += months(1);
- assert(d == date(2011, 2, 28));
- // 下面的两步操作不是想要的结果
- d += months(1);
- assert(d == date(2011, 3, 31));
- d -= months(4);
- assert(d == date(2010, 11, 30));
-
- // 要解决上面的问题,可以用month_iterator
- month_iterator itr(date(2010, 11, 29));
- ++itr;
- assert(*itr == date(2010, 12, 29));
- ++itr;
- assert(*itr == date(2011, 1, 29));
- ++itr;
- assert(*itr == date(2011, 2, 28));
- ++itr;
- assert(*itr == date(2011, 3, 29));
- --itr;
- --itr;
- --itr;
- --itr;
- assert(*itr == date(2010, 11, 29)); // 这样子结果不会发生变化.
- }
|