来自std :: string的bo​​ost :: gregorian :: date

时间:2013-06-19 16:49:35

标签: 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::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;
}

但不幸的是,我只收到了&#34; not-a-date-time&#34;。我做错了什么?有没有更简单的方法将这种流行形式的字符串转换为boost :: gregorian:date?

2 个答案:

答案 0 :(得分:7)

  

我做错了什么?

你得到“不是约会时间”,因为这不是一个有效的日期:1922年不是闰年,所以2月只有28天。

如果我将代码更改为有效日期,例如1922-02-281924-02-29,则代码可以正常运行。

  

有没有更简单的方法将这种流行形式的字符串转换为boost :: gregorian:date?

boost::gregorian::date d = boost::gregorian::from_string(s_date);

答案 1 :(得分:2)

应该是:

boost::gregorian::date d = boost::gregorian::from_undelimited_string(s_date);

不是'from_date'

该字符串需要采用YYYYMMDD格式。

或者您可以使用:

boost::gregorian::date d = boost::gregorian::from_string(s_date);

您的字符串采用YYYY / MM / DD

形式