C++ boost::gregorian::日期自std::string
我尝试通过以下方式将std::string转换为boost::gregorian::date:C++ boost::gregorian::日期自std::string,c++,boost-date-time,C++,Boost Date Time,我尝试通过以下方式将std::string转换为boost::gregorian::date: #include <iostream> #include "boost/date_time/gregorian/gregorian.hpp" int main(int argc, char *argv[]) { std::string s_date = "1922-02-29"; std::stringstream ss(s_date); boost::gregorian::
#include <iostream>
#include "boost/date_time/gregorian/gregorian.hpp"
int main(int argc, char *argv[])
{
std::string s_date = "1922-02-29";
std::stringstream ss(s_date);
boost::gregorian::date_input_facet *df = new boost::gregorian::date_input_facet("%Y-%m-%d");
ss.imbue(std::locale(ss.getloc(), df));
date d;
ss>>d;
std::cout<<d<<std::endl;
}
#包括
#包括“boost/date\u time/gregorian/gregorian.hpp”
int main(int argc,char*argv[])
{
std::string s_date=“1922-02-29”;
std::stringstream ss(s_日期);
boost::gregorian::date\u input\u facet*df=新boost::gregorian::date\u input\u facet(“%Y-%m-%d”);
imbue(std::locale(ss.getloc(),df));
日期d;
ss>>d;
标准::cout
我做错了什么
你会得到“非日期时间”,因为这不是一个有效的日期:1922年不是闰年,所以二月只有28天
如果我将您的代码更改为有效日期,例如1922-02-28
或1924-02-29
,则您的代码对我的效果与预期一样
有没有更简单的方法将这种流行形式的字符串转换为boost::gregorian:date
我做错了什么
你会得到“非日期时间”,因为这不是一个有效的日期:1922年不是闰年,所以二月只有28天
如果我将您的代码更改为有效日期,例如1922-02-28
或1924-02-29
,则您的代码对我的效果与预期一样
有没有更简单的方法将这种流行形式的字符串转换为boost::gregorian:date
应该是:
boost::gregorian::date d = boost::gregorian::from_undelimited_string(s_date);
不是“从日期开始”
格式为YYYYMMDD的字符串是必需的
或者您可以使用:
boost::gregorian::date d = boost::gregorian::from_string(s_date);
如果字符串的格式为YYYY/MM/DD,则应为:
boost::gregorian::date d = boost::gregorian::from_undelimited_string(s_date);
不是“从日期开始”
格式为YYYYMMDD的字符串是必需的
或者您可以使用:
boost::gregorian::date d = boost::gregorian::from_string(s_date);
其中,您的字符串的格式为YYYY/MM/DD显而易见的答案。我从一个文件中得到了一个格式错误的日期,并且没有想到这个问题可能与我的代码之外的其他内容有关。我想您脑子里可能有boost::gregorian::from_字符串。显而易见的答案。我从一个文件中得到了一个格式错误的日期,并且没有想到这个问题除了我的代码,你可能还和别的东西有关。我想你脑子里有boost::gregorian::from_字符串。