Получите год от повышения ptime - PullRequest
5 голосов
/ 13 сентября 2009

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

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

В соответствии с документацией повышения:

Класс 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 голосов
/ 13 сентября 2009

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

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