0

Boost::gregorian::from_*string() の解析関数は、4 桁の年しか処理しないようです (2 桁の年に対して実行時エラーが発生します)。

boost::gregorian::from_*string() 関数を使用して 2 桁の年を処理する最もクリーンな方法は何ですか?

1 つの可能性は、日付形式をサニタイズするために 2000 または 1900 を追加するためのプログラミング ルールと組み合わせて、日付文字列に対していくつかの事前処理を行うことですが、より良い方法がある場合、車輪を再発明してコードを追加しすぎたくはありません。これを行う。

4

2 に答える 2

0

この形式はブーストでサポートされていないようです。幸いなことに、日付形式の解析はワンライナーです。以下は AXE で書かれたパーサーです。Spirit でも同様のコードを書けると思います。

using namespace boost::gregorian;
using namespace axe::shortcuts;
unsigned year, month, day;
auto date_rule = _uint >> year > '/' > _uint >> month > '/' > _uint >> day > _z;
std::string date_string("99/01/22");
if(date_rule(date_string.begin(), date_string.end()).matched)
{
   date d(year < 100 ? year + 1900 : year, month, day);
   // etc.
}
于 2012-05-29T19:00:40.037 に答える
0

Boost.DateTime はそれを行うことはできません –ドキュメントには、必要な動作に一致するフォーマット フラグがあると書かれてい%Cますが、それは出力にのみ使用でき、入力には使用できず、限られたプラットフォーム セットでのみ使用できます。

于 2012-05-25T21:14:33.943 に答える