2009-09-12 1 views
5

Sto convertendo un programma esistente in C++ e qui è necessario modificare i timestamp di Sybase. Questi timestamp contengono informazioni di data e ora, che a mia conoscenza possono essere gestite al meglio da una variabile boost::posix_time::ptime. In alcuni punti del codice ho bisogno di ottenere l'anno dalla variabile.Ottieni anno da boost ptime

La mia domanda è: come posso modo più efficiente estrarre il anno da una variabile spinta ptime? Di seguito è riportato un programma di esempio in cui sono necessarie tre righe di codice, con il sovraccarico di una variabile ostringstream aggiuntiva e una variabile boost::gregorian::date.

Secondo la documentazione spinta:

Classe ptime dipende da gregorian::date per l'interfaccia alla parte data di un punto di tempo

tuttavia gregorian::date non sembra essere una classe base di ptime. In qualche modo mi manca qualcosa qui.

Non esiste un modo più semplice per estrarre l'anno dallo ptime?

Esempio:

#include <boost/date_time/local_time/local_time.hpp> 
#include <iostream> 

int main() 
{ 
    boost::posix_time::ptime t(boost::posix_time::second_clock::local_time()); 
    boost::gregorian::date d = t.date(); 
    std::ostringstream os; os << d.year(); 
    std::cout << os.str() << std::endl; 
    return 0; 
} 

risposta

5

Salta l'ostringstream. Altrimenti, potresti trarre vantaggio da "utilizzando il namespace ..."

#include <boost/date_time/local_time/local_time.hpp> 
#include <iostream> 

int main() 
{ 
    using namespace boost::posix_time; 
    std::cout << second_clock::local_time().date().year() << std::endl; 
    return 0; 
}