CLASS TEMPLA(3)

NAME
boost::date_time::format_date_parser - Class with generic date parsing using a format string.

SYNOPSIS

// In header: <boost/date_time/format_date_parser.hpp>
template<typename date_type, typename charT>
class format_date_parser {
public:
  // types
  typedef std::basic_string< charT >                string_type;
  typedef std::basic_istringstream< charT >         stringstream_type;
  typedef std::istreambuf_iterator< charT >         stream_itr_type;
  typedef string_type::const_iterator               const_itr;
  typedef date_type::year_type                      year_type;
  typedef date_type::month_type                     month_type;
  typedef date_type::day_type                       day_type;
  typedef date_type::duration_type                  duration_type;
  typedef date_type::day_of_week_type               day_of_week_type;
  typedef date_type::day_of_year_type               day_of_year_type;
  typedef string_parse_tree< charT >                parse_tree_type;
  typedef parse_tree_type::parse_match_result_type  match_results;
  typedef std::vector< std::basic_string< charT > > input_collection_type;
  // construct/copy/destruct
  format_date_parser(const string_type &, const input_collection_type &,
                     const input_collection_type &,
                     const input_collection_type &,
                     const input_collection_type &);
  format_date_parser(const string_type &, const std::locale &);
  format_date_parser(const format_date_parser< date_type, charT > &);
  // public member functions
  string_type format() const;
  void format(string_type);
  void short_month_names(const input_collection_type &);
  void long_month_names(const input_collection_type &);
  void short_weekday_names(const input_collection_type &);
  void long_weekday_names(const input_collection_type &);
  date_type parse_date(const string_type &, const string_type &,
                       const special_values_parser< date_type, charT > &) const;
  date_type parse_date(std::istreambuf_iterator< charT > &,
                       std::istreambuf_iterator< charT > &,
                       const special_values_parser< date_type, charT > &) const;
  date_type parse_date(std::istreambuf_iterator< charT > &,
                       std::istreambuf_iterator< charT > &, string_type,
                       const special_values_parser< date_type, charT > &) const;
  month_type parse_month(std::istreambuf_iterator< charT > &,
                         std::istreambuf_iterator< charT > &, string_type) const;
  month_type parse_month(std::istreambuf_iterator< charT > &,
                         std::istreambuf_iterator< charT > &, string_type,
                         match_results &) const;
  day_type parse_var_day_of_month(std::istreambuf_iterator< charT > &,
                                  std::istreambuf_iterator< charT > &) const;
  day_type parse_day_of_month(std::istreambuf_iterator< charT > &,
                              std::istreambuf_iterator< charT > &) const;
  day_of_week_type
  parse_weekday(std::istreambuf_iterator< charT > &,
                std::istreambuf_iterator< charT > &, string_type) const;
  day_of_week_type
  parse_weekday(std::istreambuf_iterator< charT > &,
                std::istreambuf_iterator< charT > &, string_type,
                match_results &) const;
  year_type parse_year(std::istreambuf_iterator< charT > &,
                       std::istreambuf_iterator< charT > &, string_type) const;
  year_type parse_year(std::istreambuf_iterator< charT > &,
                       std::istreambuf_iterator< charT > &, string_type,
                       match_results &) const;
};

DESCRIPTION

The following is the set of recognized format specifiers

    &#8226; a - Short weekday name

    &#8226; A - Long weekday name

    &#8226; b - Abbreviated month name

    &#8226; B - Full month name

    &#8226; d - Day of the month as decimal 01 to 31

    &#8226; j - Day of year as decimal from 001 to 366

    &#8226; m - Month name as a decimal 01 to 12

    &#8226; U - Week number 00 to 53 with first Sunday as the first day of week 1?

    &#8226; w - Weekday as decimal number 0 to 6 where Sunday == 0

    &#8226; W - Week number 00 to 53 where Monday is first day of week 1

    &#8226; x - facet default date representation

    &#8226; y - Year without the century - eg: 04 for 2004

    &#8226; Y - Year with century

The weekday specifiers (a and A) do not add to the date construction, but they provide a way to skip over the weekday names for formats that provide them.

todo -- Another interesting feature that this approach could provide is an option to fill in any missing fields with the current values from the clock. So if you have m-d the parser would detect the missing year value and fill it in using the clock.

todo -- What to do with the x. x in the classic facet is just bad...

  format_date_parser public construct/copy/destruct

    1.

    format_date_parser(const string_type & format_str,
                       const input_collection_type & month_short_names,
                       const input_collection_type & month_long_names,
                       const input_collection_type & weekday_short_names,
                       const input_collection_type & weekday_long_names);

    2.

    format_date_parser(const string_type & format_str, const std::locale & locale);

    3.

    format_date_parser(const format_date_parser< date_type, charT > & fdp);

  format_date_parser public member functions

    1.

    string_type format() const;

    2.

    void format(string_type format_str);

    3.

    void short_month_names(const input_collection_type & month_names);

    4.

    void long_month_names(const input_collection_type & month_names);

    5.

    void short_weekday_names(const input_collection_type & weekday_names);

    6.

    void long_weekday_names(const input_collection_type & weekday_names);

    7.

    date_type parse_date(const string_type & value,
                         const string_type & format_str,
                         const special_values_parser< date_type, charT > & sv_parser) const;

    8.

    date_type parse_date(std::istreambuf_iterator< charT > & sitr,
                         std::istreambuf_iterator< charT > & stream_end,
                         const special_values_parser< date_type, charT > & sv_parser) const;

    9.

    date_type parse_date(std::istreambuf_iterator< charT > & sitr,
                         std::istreambuf_iterator< charT > & stream_end,
                         string_type format_str,
                         const special_values_parser< date_type, charT > & sv_parser) const;

    Of all the objects that the format_date_parser can parse, only a date can be a special value. Therefore, only parse_date checks for special_values.

    10.

    month_type parse_month(std::istreambuf_iterator< charT > & sitr,
                           std::istreambuf_iterator< charT > & stream_end,
                           string_type format_str) const;
    Throws bad_month if unable to parse. .RE

        11.

        month_type parse_month(std::istreambuf_iterator< charT > & sitr,
                               std::istreambuf_iterator< charT > & stream_end,
                               string_type format_str, match_results & mr) const;
        Throws bad_month if unable to parse. .RE

            12.

            day_type parse_var_day_of_month(std::istreambuf_iterator< charT > & sitr,
                                            std::istreambuf_iterator< charT > & stream_end) const;
            Expects 1 or 2 digits 1-31. Throws bad_day_of_month if unable to parse. .RE

                13.

                day_type parse_day_of_month(std::istreambuf_iterator< charT > & sitr,
                                            std::istreambuf_iterator< charT > & stream_end) const;
                Expects 2 digits 01-31. Throws bad_day_of_month if unable to parse. .RE

                    14.

                    day_of_week_type
                    parse_weekday(std::istreambuf_iterator< charT > & sitr,
                                  std::istreambuf_iterator< charT > & stream_end,
                                  string_type format_str) const;

                    15.

                    day_of_week_type
                    parse_weekday(std::istreambuf_iterator< charT > & sitr,
                                  std::istreambuf_iterator< charT > & stream_end,
                                  string_type format_str, match_results & mr) const;

                    16.

                    year_type parse_year(std::istreambuf_iterator< charT > & sitr,
                                         std::istreambuf_iterator< charT > & stream_end,
                                         string_type format_str) const;
                    throws bad_year if unable to parse .RE

                        17.

                        year_type parse_year(std::istreambuf_iterator< charT > & sitr,
                                             std::istreambuf_iterator< charT > & stream_end,
                                             string_type format_str, match_results & mr) const;
                        throws bad_year if unable to parse .RE