weekdays' duration using boost date

后端 未结 2 1634
野趣味
野趣味 2021-01-15 03:16

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);
         


        
相关标签:
2条回答
  • 2021-01-15 03:51

    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 讨论(0)
  • 2021-01-15 03:52

    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";
    }
    
    0 讨论(0)
提交回复
热议问题