C++ C++;单位数日期解析
我试图解析一个日期,它包含一个月和一天中的每个数字。以下解析正确:C++ C++;单位数日期解析,c++,date-parsing,C++,Date Parsing,我试图解析一个日期,它包含一个月和一天中的每个数字。以下解析正确: 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"); 我在流中得到一个失败的状态,并且时间没有被正确地读入结构中。有没有一种干净(
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上开发。你不能说你在哪个平台上 我建议不要编写自己的解析器。查看strftime/strptime或Boost.Date\u Time。您可以使用。以下是程序的外观:
#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);
}
#包括“date.h”
#包括
#包括
int
main()
{
日期:年月日ymd;
std::istringstream ss{“2015/5/1”};
ss>>date::parse(“%Y/%m/%d”,ymd);
断言(!ss.fail());
使用名称空间date::literals;
断言(ymd=2015年5月1日);
}
如果您确实想(),您可以将年\月\日
转换为std:tm
,但除非您需要与真正需要tm
的客户沟通,否则没有理由这样做
“date.h”
仅为标题,因此它易于安装、完整记录、易于使用,并且构建在C++11
之上,因此它是非常安全的类型
这里有一个类似的问题。如果可能,请使用库(例如),前导0对于
%d
和%m
是可选的。它使用clang(8.1)和libc++在OS X上正确解析。可能错误在std库的std::get_time
或代码中的其他地方。您使用的编译器是什么?我在linux机器上使用g++5.4.1我在c++11标准的Ubuntu 12.04机器上开发。