我有一个字符串“2018Jan23T181138.65498648”,我需要转换为ptime。我使用下面的代码,但似乎它不起作用。知道我在这里做错了什么。
boost::posix_time::ptime pt;
std::istringstream is("2018Jan23T181138.65498648");
is.imbue(std::locale(std::locale::classic(), new boost::posix_time::time_input_facet("%Y%m%dT%H%M%S.%f")));
is >> pt;
std::cout << pt;
答案 0 :(得分:0)
您至少需要匹配格式字符串以反映输入格式。
“Jan”不是%Y%m%d
的有效匹配(而是期望20180123
)。同样,%S.%f
是一个格式字符串,可用于格式化¹,但要用分数解析秒数,the docs显示使用%s
<强> Live On Coliru 强>
#include <boost/date_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
#include <sstream>
#include <iostream>
int main() {
boost::posix_time::ptime pt;
std::istringstream is("2018Jan23T181138.65498648");
is.imbue(std::locale(std::locale::classic(), new boost::posix_time::time_input_facet("%Y%b%dT%H%M%s")));
if (is >> pt) {
std::cout << pt << "\n";
} else {
std::cout << "unparsed\n";
}
}
打印
2018-Jan-23 18:11:38.654986
¹尚未对输出格式进行测试