Class template nth_kday_of_month
boost::date_time::nth_kday_of_month — Useful generator functor for finding holidays.
Synopsis
template<typename date_type>
class nth_kday_of_month :
public boost::date_time::year_based_generator< date_type >
{
public:
typedef date_type::calendar_type calendar_type;
typedef calendar_type::day_of_week_type day_of_week_type;
typedef calendar_type::month_type month_type;
typedef calendar_type::year_type year_type;
typedef date_type::duration_type duration_type;
enum week_num { first = =1, second, third, fourth, fifth };
nth_kday_of_month(week_num, day_of_week_type, month_type);
virtual date_type get_date(year_type) const;
month_type month() const;
week_num nth_week() const;
day_of_week_type day_of_week() const;
const char * nth_week_as_str() const;
virtual std::string to_string() const;
};
Description
На основе идеи в Кэл. Calc. для поиска праздников, которые являются «первым понедельником сентября». В случае «пятого» дня месяца результатом будет последний день месяца, который может быть четвертым или пятым в зависимости от структуры месяца.
Алгоритм здесь в основном угадывает первый день месяца. Затем наступает первый день правильного типа. То есть, если первый месяц вторник и ему нужен В среду мы просто увеличиваемся на один день, а затем мы можем добавить продолжительность недели, пока не дойдем до «седьмого дня». Есть, вероятно, более эффективные алгоритмы, основанные на использовании мода 7, но этот достаточно хорошо работает для основных приложений.
nth_kday_of_month
public
construct/copy/destruct
- <
nth_kday_of_month(week_numweek_no,day_of_week_typedow,month_typem);
>
nth_kday_of_month
public member functions
- <
virtualdate_typeget_date(year_typey)const;
>Верните конкретную дату, если она указана в конкретном году.
- <
month_typemonth()const;
>
- <
week_numnth_week()const;
>
- <
day_of_week_typeday_of_week()const;
>
- <
constchar*nth_week_as_str()const;
>
- <
virtualstd::stringto_string()const;
>Возвращает строку, подходящую для использования в строке часового пояса POSIX.Возвращает строку, отформатированную как «M4.3.0» ==>3-е воскресенье апреля.