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

私は何を間違っているのですか?

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);

「開始日」ではありません

文字列は YYYYMMDD の形式をとる必要があります。

または、次を使用できます。

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

文字列の形式は YYYY/MM/DD です

于 2014-04-09T13:17:08.090 に答える