Сообщение Re: Boost.DateTime - непонятка с фасетами и форматированием от 28.11.2014 5:24
Изменено 28.11.2014 5:25 LowCoder
Здравствуйте, LowCoder, Вы писали:
LC>Прошу помочь советом – мне нужно из строки в которой содержится дата и время получить количество секунд с начала эпохи (1.1.1970) (ну или вообще с начала эры то не суть). Строка может быть в разных форматах. Для решения проблемы я решил (точнее мне нужнет именно он по тех заданию) использовать boost (1.54) DataTime но что то совсем запутался с их фасетами.
LC>Вот такая функция упорно возвращает для трех даты времени одинаковое количество секунд
LC>
LC>Те никакие мои ухищерения не работают – всегда количество секунд одинаковое. Как быть?
ОО! сам спросил и сам ответил — всегда приятно пообщатся с умным человеком
все дело было в более вдумчивом чтении манула — решилось заменой строчки
на
и все заработало
Тем не менне приветствуются любые комментарии
LC>Прошу помочь советом – мне нужно из строки в которой содержится дата и время получить количество секунд с начала эпохи (1.1.1970) (ну или вообще с начала эры то не суть). Строка может быть в разных форматах. Для решения проблемы я решил (точнее мне нужнет именно он по тех заданию) использовать boost (1.54) DataTime но что то совсем запутался с их фасетами.
LC>Вот такая функция упорно возвращает для трех даты времени одинаковое количество секунд
LC>
LC>int64_t getSecondsFromDate( const std::string& strDate, const std::string& format )
LC>{
LC> namespace bpt = boost::posix_time;
LC> typedef bpt::time_facet time_facet;
LC> typedef bpt::ptime ptime;
LC> bpt::time_facet* facet = new bpt::time_facet();
LC> facet->format( format.c_str() );
LC> std::stringstream ss( strDate.c_str() );
LC> ss.imbue( std::locale(ss.getloc(), facet) );
LC> bpt::ptime pt;
LC> ss >> pt;
LC> static bpt::ptime epoch( boost::gregorian::date(1970, 1, 1) );
LC> bpt::time_duration diff( pt - epoch );
LC> return diff.total_seconds();
LC>}
LC>...
LC>std::string date1 = "20080501123045";
LC>std::string date2 = "20080501134045";
LC>std::string date3 = "20080501164045";
LC>int64_t sec1 = getSecondsFromDate( date1, "%Y%m%d%H%M%S" );
LC>int64_t sec2 = getSecondsFromDate( date2, "%Y%m%d%H%M%S" );
LC>int64_t sec3 = getSecondsFromDate( date3, "%Y%m%d%H%M%S" );
LC>std::cout << "Date1=" << sec1 << " Date2=" << sec2 << " Date3=" << sec3 << std::endl;
LC>Output
LC>Date1=2077252342 Date2=2077252342 Date3=2077252342
LC>LC>Те никакие мои ухищерения не работают – всегда количество секунд одинаковое. Как быть?
ОО! сам спросил и сам ответил — всегда приятно пообщатся с умным человеком
bpt::time_facet* facet = new bpt::time_facet();на
bpt::time_input_facet* facet = new bpt::time_input_facet();и все заработало
Тем не менне приветствуются любые комментарии
Re: Boost.DateTime - непонятка с фасетами и форматированием
ОО! сам спросил и сам ответил — всегда приятно пообщатся с умным человеком
все дело было в более вдумчивом чтении манула — решилось заменой строчки
на
и все заработало
Тем не менне приветствуются любые комментарии
bpt::time_facet* facet = new bpt::time_facet();на
bpt::time_input_facet* facet = new bpt::time_input_facet();и все заработало
Тем не менне приветствуются любые комментарии