1

我试图以这种方式将 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?

4

2 回答 2

7

我做错了什么?

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

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

有没有更简单的方法可以将如此流行的字符串转换为 boost::gregorian:date?

boost::gregorian::date d = boost::gregorian::from_string(s_date);
于 2013-06-19T16:57:29.717 回答
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

于 2014-04-09T13:17:08.090 回答