Ottieni anno dal boost ptime
-
06-07-2019 - |
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;
}
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;
}