如何使用boost将自定义字符串转换为ptime

时间:2018-01-23 14:00:38

标签: c++11 boost

我有一个字符串“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;

1 个答案:

答案 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

¹尚未对输出格式进行测试