Год от повышения ptime


Я преобразую существующую программу в C++ и здесь нужно манипулировать метками времени Sybase. Эти временные метки содержат информацию о дате и времени, которая, насколько мне известно, может быть лучше всего обработана переменной boost::posix_time::ptime. В нескольких местах кода мне нужно получить год из переменной.

Мой вопрос: как я могу наиболее эффективно извлечь year из переменной boost ptime? Ниже приведен пример программы, в которой требуется три строки кода, с накладными расходами дополнительная переменная ostringstream и переменная boost::gregorian::date.

Согласно документации boost:

Класс ptime зависит от gregorian::date для интерфейса к часть даты точки времени

Однако gregorian::date, похоже, не является базовым классом ptime. Почему-то мне здесь чего-то не хватает.

Нет ли более простого способа извлечь год из ptime?

Пример:

#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;
}
1 5

1 ответ:

Пропустить ostringstream. В противном случае вы можете извлечь выгоду из "использования пространства имен..."

#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;
}