$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Jeff Garland (jeff_at_[hidden])
Date: 2006-06-26 22:38:20
Jason Dolan wrote:
> I'm looking to take a string and convert it to a date.  The only problem 
> is the string can be one of many patterns. i.e. ("%Y%m%d", "%Y-%m-%d", 
> "%d/%m/%Y", etc...).  It is also possible that the given string will 
> fail all pattern matches, and thus return false.
And there's nothing to indicate which pattern it might be?
> Can anyone give me an example of how to do this?  
The date input facet can only parse one pattern at a time.  So you might need 
some way to distinguish between the various types to use the input facet. 
Here's the pseudo code sketch for the examples above:
   if (date_string.find('-')) {
      date_input_facet di1(...);
      ...
   } else if (date_string.find('/')) {
      date_input_facet di2(...);
      ...
   }
The problem you are going to have is if you have formats that can't be 
distinguished in this fashion.  For example:
    %Y%m%d
    %d%m%Y
There's no parser that can handle this case.
 > I know you need to use the date_input_facet, but I am VERY new to
 > boost and can't get it to work.
Did you look at the docs?  It basically comes down to:
     using namespace boost::gregorian;
     date_input_facet* input_facet = new date_input_facet("%Y-%m-%d);
     std::istringstream iss("2006-06-01");
     iss.imbue(std::locale(std::locale::classic(), input_facet));
     date t;
     in >> t;
Note, this won't work at all on old compilers...so best to tell me your 
compiler / version of boost if you are having compile issues.
Jeff