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