Boost.DateTime - непонятка с фасетами и форматированием
От: LowCoder  
Дата: 28.11.14 04:58
Оценка:
Прошу помочь советом – мне нужно из строки в которой содержится дата и время получить количество секунд с начала эпохи (1.1.1970) (ну или вообще с начала эры то не суть). Строка может быть в разных форматах. Для решения проблемы я решил (точнее мне нужнет именно он по тех заданию) использовать boost (1.54) DataTime но что то совсем запутался с их фасетами.

Вот такая функция упорно возвращает для трех даты времени одинаковое количество секунд

int64_t getSecondsFromDate( const std::string& strDate, const std::string& format )
{
   namespace bpt = boost::posix_time;
   typedef bpt::time_facet time_facet;
   typedef bpt::ptime ptime;
 
   bpt::time_facet* facet = new bpt::time_facet();
   facet->format( format.c_str() );

   std::stringstream ss( strDate.c_str() );
   ss.imbue( std::locale(ss.getloc(), facet) );

   bpt::ptime pt;
   ss >> pt;

   static bpt::ptime epoch( boost::gregorian::date(1970, 1, 1) );
   bpt::time_duration diff( pt - epoch );
   return diff.total_seconds();
}

...
std::string date1 = "20080501123045";
std::string date2 = "20080501134045";
std::string date3 = "20080501164045";

int64_t sec1 = getSecondsFromDate( date1, "%Y%m%d%H%M%S" );
int64_t sec2 = getSecondsFromDate( date2, "%Y%m%d%H%M%S" );
int64_t sec3 = getSecondsFromDate( date3, "%Y%m%d%H%M%S" );

std::cout << "Date1=" << sec1 << " Date2=" << sec2 << " Date3=" << sec3 << std::endl;

Output
Date1=2077252342 Date2=2077252342 Date3=2077252342


Те никакие мои ухищерения не работают – всегда количество секунд одинаковое. Как быть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.