我正在尝试解析包含每个月和每天的单个数字的日期。以下解析正确:
std::istringstream ss("2015/05/01");
std::tm tmb = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
ss >> std::get_time(&tmb, "%Y/%m/%d");
但是当我尝试解析时
std::istringstream ss("2015/5/1");
我在流中遇到了一个失败的状态,并且没有正确地将时间读入结构中。有没有一种干净(高效)的方法可以解析它?
编辑:我正在开发Ubuntu 12.04和编译器g ++ 5.4.1。答案 0 :(得分:0)
您没有说明您所在的平台。
我建议不要编写自己的解析器。看一下strftime / strptime或Boost.Date_Time。
答案 1 :(得分:0)
您可以使用Howard Hinnant's portable, free, open-source date/time library。以下是该程序的外观:
#include "date.h"
#include <cassert>
#include <sstream>
int
main()
{
date::year_month_day ymd;
std::istringstream ss{"2015/5/1"};
ss >> date::parse("%Y/%m/%d", ymd);
assert(!ss.fail());
using namespace date::literals;
assert(ymd == may/1/2015);
}
如果您真的想要(here is how),可以将year_month_day
转换为std:tm
,但除非您需要与某些真正需要tm
的客户进行通信,没有理由。
"date.h"
仅限标题,因此易于安装,完整记录,易于使用,并且基于C ++ 11 <chrono>
构建,因此它非常类型安全。
这是wandbox link showing it running the above program with gcc 5.4.0。