Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;单位数日期解析_C++_Date Parsing - Fatal编程技术网

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机器上开发。