如何使用boost::date_time解析一年中的星期?



我想解析由4位数的年份和年份中的星期数组成的字符串。我遵循了boost日期/时间IO教程,生成了如下的测试示例:

std::string week_format = "%Y-W%W";
boost::date_time::date_input_facet<boost::gregorian::date, char> week_facet =     boost::date_time::date_input_facet<boost::gregorian::date, char>(week_format);
std::stringstream input_ss;
input_ss.imbue(locale(input_ss.getloc(), &week_facet));
std::string input_week = "2004-W34";
input_ss.str(input_week);
boost::gregorian::date input_date;
input_ss >> input_date;

不幸的是,input_date只是打印为"2004-01-01",这意味着它只是解析了年份。我做错了什么?%W在输入端不可用吗?(文档没有这样标记)

你是正确的,文档没有在"格式标志"部分这样标记(旁边没有"!"…)

http://www.boost.org/doc/libs/1_35_0/doc/html/date_time/date_time_io.html date_time.format_flags

但这似乎是一个疏忽。因为在Boost的format_date_parser.hpp中,parse_date中没有覆盖这种情况……您可以查看switch语句并看到:

http://svn.boost.org/svn/boost/trunk/boost/date_time/format_date_parser.hpp

尽管没有任何代码来做这件事,甚至源代码中的注释都说它处理解析输入的%W和%U。这是怎么回事?: -/

另外,我认为在您的示例中需要动态分配week_facet:
std::string week_format = "%Y-W%W";
boost::date_time::date_input_facet<boost::gregorian::date, char>* week_facet =
    new boost::date_time::date_input_facet<boost::gregorian::date, char>(
        week_format
    );
std::stringstream input_ss;
input_ss.imbue(std::locale(input_ss.getloc(), week_facet));

(或者至少我必须这样做,以防止示例崩溃。)

相关内容

  • 没有找到相关文章

最新更新