Как создать объект Boost ptime из фасета ввода даты

Я пытался использовать библиотеку C ++ Boost date_time для загрузки строки формата «16:43 12 декабря 2012 г.» в поток строк с фасетом ввода даты «% H:% M% B% d,% Y».
Далее я хочу создать объект Boost ptime из строкового потока, чтобы я мог выполнять математику даты / времени.
Я не могу заставить его работать — ниже код:

std::string autoMatchTimeStr(row["message_time"]);
ptime autoMatchTime(time_from_string(autoMatchTimeStr));

date_input_facet* fin = new date_input_facet("%H:%M %B %d, %Y");
stringstream dtss;

dtss.imbue(std::locale(std::locale::classic(), fin));
dtss << msg.getDate(); //msg.getDate() returns “16:43 December 12, 2012”

ptime autoMatchReplyTime;
dtss >> autoMatchReplyTime;

if( autoMatchReplyTime < autoMatchTime + minutes(15)) {
stats[ "RespTimeLow" ] = "increment";
sysLog << "RespTimeLow" << flush;
}

AutoMatchTime содержит допустимое значение даты / времени, а autoMatchReplyTime — нет. Я хотел бы узнать, как это должно работать, но если мне нужно использовать C strptime для инициализации struct tm для конструктора ptime, я могу это сделать. Я потратил много времени на исследования, кодирование, отладку с помощью GDB и не могу понять это. Любая помощь будет принята с благодарностью.

2

Решение

Итак … Почему вы пытаетесь использовать date_input_facet вместо time_input_facet? Следующий пример работает нормально.

#include <sstream>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
const std::string time = "16:43 December 12, 2012";
boost::posix_time::time_input_facet* facet =
new boost::posix_time::time_input_facet("%H:%M %B %d, %Y");
std::stringstream ss;
ss.imbue(std::locale(std::locale(), facet));
ss << time;
boost::posix_time::ptime pt;
ss >> pt;
std::cout << pt << std::endl;
}

код

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]