Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is an old version of boost. Click here for the latest version's documentation home page.
PrevUpHomeNext

Class template format_date_parser

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

Synopsis

template<typename date_type, typename charT> 
class format_date_parser {
public:
// types
typedef std::basic_string< charT > string_type;
typedef std::basic_stringstream< 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_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

  • a - Short weekday name

  • A - Long weekday name

  • b - Abbreviated month name

  • B - Full month name

  • d - Day of the month as decimal 01 to 31

  • j - Day of year as decimal from 001 to 366

  • m - Month name as a decimal 01 to 12

  • U - Week number 00 to 53 with first Sunday as the first day of week 1?

  • w - Weekday as decimal number 0 to 6 where Sunday == 0

  • W - Week number 00 to 53 where Monday is first day of week 1

  • x - facet default date representation

  • y - Year without the century - eg: 04 for 2004

  • 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 construct/copy/destruct

  1. format_date_parser(const string_type & format, 
    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, 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) ;
  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, 
    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, 
    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) const;
  11. month_type parse_month(std::istreambuf_iterator< charT > & sitr, 
    std::istreambuf_iterator< charT > & stream_end, 
    string_type format, match_results & mr) const;
  12. day_type parse_day_of_month(std::istreambuf_iterator< charT > & sitr, 
    std::istreambuf_iterator< charT > & stream_end) const;
  13. day_of_week_type 
    parse_weekday(std::istreambuf_iterator< charT > & sitr, 
    std::istreambuf_iterator< charT > & stream_end, 
    string_type format) const;
  14. day_of_week_type 
    parse_weekday(std::istreambuf_iterator< charT > & sitr, 
    std::istreambuf_iterator< charT > & stream_end, 
    string_type format, match_results & mr) const;
  15. year_type parse_year(std::istreambuf_iterator< charT > & sitr, 
    std::istreambuf_iterator< charT > & stream_end, 
    string_type format) const;
  16. year_type parse_year(std::istreambuf_iterator< charT > & sitr, 
    std::istreambuf_iterator< charT > & stream_end, 
    string_type format, match_results & mr) const;
Copyright 2001-2005 CrystalClear Software, Inc

PrevUpHomeNext