boost::gregorian::date from std::string



我尝试用这种方式将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;
}
但不幸的是,我只收到了"not-a-date-time"。我做错了什么?是否有更简单的方法将这种流行形式的字符串转换为boost::gregorian:date?

我做错了什么?

你得到"not-a-date-time",因为那不是一个有效的日期:1922年不是闰年,所以2月只有28天。

如果我将其更改为有效日期(如1922-02-281924-02-29),您的代码将按预期工作。

是否有更简单的方法将字符串转换为boost::gregorian:date?

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

应该是:

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

相关内容

  • 没有找到相关文章

最新更新