I'm experiencing a problem using custom formatting of fractional seconds.

const std::string date_string = "2006 Jun 01 999000 23.59.59";
const std::string format_string = "%Y %b %d %f %H.%M.%S";

When using a time_facet together with the "%f" flag, I get a correct output
containing a 6-digit number in place of the fractional part.

However, using a time_input_facet together with the "%f" flag, I cannot get
a correct ptime from an input using the same format as the above example.

The problem is twofold :

1) First, the input facet expects a leading '.'
   otherwise, it parses a special value and fails.
   [see time_facet.hpp(1035-1049)]
   This is not the case in an output facet.

2) Second, even if I include a leading dot, the space
   after the fractional seconds is not consumed, and
   the parsing of the remainder fails.
   This means that I need to add an extra space to the
   input format string.

Here is a sample program:

---------
#include <cassert>
#include <boost/posix_time/posix_time.hpp>
Using namespace boost;
...
        posix_time::ptime time;

        const std::string input_format =  "%Y %b %d %f  %H.%M.%S"; // formats are
        const std::string output_format = "%Y %b %d .%f %H.%M.%S"; // not symmetric

        const std::string input_date_string = "2006 Jun 01 .999000 23.59.59";
        std::string output_date_string;

        {
                posix_time::time_input_facet* input_facet =
                        new posix_time::time_input_facet(input_format.c_str());

                std::istringstream in(input_date_string);
                in.imbue(std::locale(std::locale::classic(), input_facet));
                in >> time;
        }

        {
                posix_time::time_facet* output_facet =
                        new posix_time::time_facet(output_format.c_str());

                std::ostringstream out;
                out.imbue(std::locale(std::locale::classic(), output_facet));
                out << time;

                output_date_string = out.str();
        }

        assert( output_date_string == input_date_string );
---------

Am I missing something ?
Thanks for your help.
Maxime LABELLE.