2
文字列からptimeに変換する際に時間の割合を読み取る際に問題があります。ここで はに関するsoruceコードです:文字列をptimeに変換するときにptime input_facetエラーが%fフラグで返される
#include <iostream>
#include <string>
#include <boost/date_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/conversion.hpp>
int main(int, char *)
{
using namespace std;
using namespace boost;
using namespace boost::posix_time;
using namespace boost::local_time;
using namespace boost::gregorian;
time_facet* output_facet = new time_facet();
time_input_facet* input_facet = new time_input_facet();
stringstream sstream;
sstream.imbue(locale(locale::classic(), output_facet));
sstream.imbue(locale(sstream.getloc() , input_facet));
string format("%d/%m/%Y %H:%M:%S.%f"); //example works fine without %f!!!
//format = "%H"; //-> works
//format = "%f"; //-> error
output_facet->format(format.c_str());
input_facet->format(format.c_str());
ptime dt = microsec_clock().local_time();
sstream.str("");
sstream << dt;
cout << sstream.str() << endl;
string time_string = sstream.str();
ptime tgtDt(boost::date_time::not_a_date_time);
sstream.str(time_string.c_str());
sstream >> tgtDt;
cout << tgtDt << endl;
}
プログラムは、フォーマット文字列内の%fをせずに細かい動作します。しかし、%f tgtDtは "not-a-date-time"です。私はすべての入力互換性のないフォーマットフラグが "!"でマークされているので、私はブースト1.44を使用し、%fは仕事をsholdしています。ドキュメントに記載されています。
文字列からfracの部分を取り除く方法はありますか?
いや、同じことが。あなたは好きなようにフォーマット文字列を減らすことができます。 "%H"はうまく動作しますが、 "%f"は – DrFroid
興味深いことに、首都Fは動作しているようです。 – StevieG
元の答えを正しいものと編集しました! – StevieG