C++ boost::gregorian::日期自std::string

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::

我尝试通过以下方式将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::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_字符串。