
Why don't you use the input/output facet with a stream to define the format you want ? For example I was able to define my own time format as simply as this: pt::time_input_facet* pInputFacet = new pt::time_input_facet(); pInputFacet->time_duration_format( "%H:%M" ); std::locale loc( std::locale::classic(), pInputFacet ); ss.imbue( loc ); You can do the same with the boost::gregorian::date. Check the documentation (at least if you use the 1.33.1 version of boost). I hope it will help you. Alexandre Gacon -----Message d'origine----- De : boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] De la part de Andrew Holden Envoyé : mardi 21 mars 2006 23:18 À : boost-users@lists.boost.org Objet : Re: [Boost-users] [date_time] How to create a date from stringwithspecific format?
-----Original Message----- From: Christian Henning [mailto:chhenning@gmail.com] Sent: Tuesday, March 21, 2006 4:23 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] [date_time] How to create a date from string withspecific format?
Hi Dean, thanks for the answer.
Since, I know the format of the date strings I could also use boost::regex for the general format and then feeding a date object with the values. If I get an exception during the date object contruction I know that the user provided me with garbage.
Any thoughts on that?
Thanks again, Christian
Have you considered using Regex's submatches? A slightly modified example follows. // date format: mm-dd-yyyy boost::regex oDateReg( "(\\d{2})-(\\d{2})-(\\d{4})" ); std::string strDate( "11-33-1997" ); boost::smatch dateMatch; if( boost::regex_match( strDate , dateMatch , oDateReg )) { try { std::string strMonth = dateMatch[1]; std::string strDay = dateMatch[2]; std::string strYear = dateMatch[3]; unsigned int nYear = boost::lexical_cast<unsigned int>(strYear); unsigned int nMonth = boost::lexical_cast<unsigned int>(strMonth); unsigned int nDay = boost::lexical_cast<unsigned int>(strDay); date d( nYear, nMonth, nDay ); date::ymd_type ymd = d.year_month_day(); } catch( std::out_of_range oEx ) { std::cout << "Error: " << oEx.what() << std::endl; } } There are two advantages to this. First, you no longer need to count characters when extracting the date components. Second, you have a little more freedom in defining your date format. For example, you could use the following definition for oDateReg to also accept single-digit months and/or days: boost::regex oDateReg( "(\\d{1,2})-(\\d{1,2})-(\\d{4})" ); Andrew Holden _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users