我在从字符串转换为ptime时读取时间分数时遇到问题。 这是关于soruce代码:
#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是“不是约会时间”。我使用boost 1.44和doc说%f shold工作,因为每个输入不兼容的格式标志都标有“!”在文档中。
有关如何从字符串中获取压裂部分的任何想法吗?
答案 0 :(得分:1)
好的,想通了(知道它与点有关!).. 输入面和输出面需要不同的格式。请尝试以下方法:
string inputformat("%d/%m/%Y %H:%M:%S%f"); //no dot before %f
string format("%d/%m/%Y %H:%M:%S.%f"); //dot before %f
output_facet->format( format.c_str() );
input_facet->format( inputformat.c_str() );