开发者

weekdays' duration using boost date

Is there a way to get only the no. of weekdays between 2 boost dates.

In the following, I'm only getting calendar days.

date begin_dt(2011,Aug,3);
date end_dt(day_clock::local_day());
days duration=end_dt-begin_dt;

std::cout<<"calendar days between begin & end date 开发者_StackOverfloware: "<<duration<<std::endl;


Perhaps the simplest way is to run a day_iterator from start to finish:

#include <iostream>
#include <boost/date_time.hpp>
int main()
{
    using namespace boost::gregorian;

    date begin_dt(2011,Aug,3);
    date end_dt(day_clock::local_day());
    days duration=end_dt-begin_dt;

    std::cout<<"calendar days between begin & end date are:" << duration << '\n';

    int cnt=0;
    for(day_iterator iter = begin_dt; iter!=end_dt; ++iter)
    {
        if(    iter->day_of_week() !=  boost::date_time::Saturday
            && iter->day_of_week() !=  boost::date_time::Sunday)
            ++cnt;
    }
    std::cout << "of them " << cnt << " are weekdays\n";
}


You could start substracting the number of days to the next week start, and deleting either 1 or two depending if you're on saturday or before, or sunday. Then, you can divide the rest of the days remaining by 7, multiply that number by 2, and substract to the days. You have to make a case for the remainder too. If it is 6 (saturday), you have to remove one more. Not easy, but you get the idea.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜