продолжительность будних дней с использованием даты повышения - PullRequest
2 голосов
/ 08 сентября 2011

Есть ли способ получить только нет. рабочих дней между 2 датами повышения.

В следующем у меня только календарные дни.

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<<std::endl;

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Пожалуй, самый простой способ - запустить day_iterator от начала до конца:

#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";
}
1 голос
/ 08 сентября 2011

Вы можете начать вычитать количество дней до начала следующей недели и удалить 1 или 2 в зависимости от того, будете ли вы в субботу, или раньше, или в воскресенье.Затем вы можете разделить оставшиеся дни на 7, умножить это число на 2 и вычесть до дней.Вы должны сделать случай для остатка тоже.Если это 6 (суббота), вы должны удалить еще один.Не легко, но вы поняли.

...