Durata dei giorni feriali utilizzando la data di boost
-
27-10-2019 - |
Domanda
C'è un modo per ottenere solo il no. dei giorni feriali tra 2 date di spinta.
Di seguito, ricevo solo giorni di calendario.
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;
Soluzione
Forse il modo più semplice è eseguire un day_iterator dall'inizio alla fine:
#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";
}
Altri suggerimenti
Potresti iniziare a sottrarre il numero di giorni all'inizio della settimana successiva ed eliminare 1 o due a seconda se sei il sabato o prima o domenica. Quindi, è possibile dividere il resto dei giorni rimanenti per 7, moltiplicare quel numero per 2 e di essere sottratto ai giorni. Devi fare un caso anche per il resto. Se è 6 (sabato), devi rimuoverne un altro. Non è facile, ma hai l'idea.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow