Domanda

Sto convertendo un programma esistente in C ++ e qui ho bisogno di manipolare i timestamp di Sybase. Questi timestamp contengono informazioni su 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.

La mia domanda è: come posso estrarre in modo più efficiente l ' anno da una variabile boost ptime? Di seguito è riportato un programma di esempio in cui prende tre righe di codice, con l'overhead di una variabile extra ostringstream e un boost :: gregorian :: date variabile.

Secondo la documentazione di boost:

  

La classe ptime dipende da gregorian :: date per l'interfaccia con   parte della data di un punto temporale

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 dal 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;
}
È stato utile?

Soluzione

Salta il ostringstream. In caso contrario, potresti beneficiare di " utilizzo dello spazio dei nomi ... "

#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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top