![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
GregorianBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 10. Boost.Date_Time
|
Example | Description |
---|---|
Простая арифметика даты. Восстановите текущий день с часов. | |
Простой анализ и форматирование дат из / в строки | |
Посмотрите, есть ли дата в наборе периодов даты (например: это праздник / выходные) | |
Небольшая утилита, которая печатает все дни в месяц из командной строки. Нужно ли знать, был ли 1999-ян-1 пятницей или субботой? Эта программа показывает, как это сделать. | |
Использует генераторы дат для преобразования абстрактной спецификации в конкретный набор дат. |
Повышение класса::gregorian::date является основным интерфейсом для программирования даты. В общем, класс даты неизменен после построения, хотя он позволяет присваивать с другой даты. Методы создания дат включают чтениетекущей даты с часов, использованиеитераторов датиалгоритмов дат или генераторов.
Внутреннее повышение::gregorian::date хранится в виде 32-битного целого типа. Класс специально разработан, чтобы не содержать виртуальных функций. Такая конструкция позволяет эффективно вычислять и использовать память с большим набором дат.
Конструкция даты подтверждает все вводимые данные, так что невозможно построить «недействительную» дату. То есть 2001-29 февраля не может быть построен как дата. Различные исключения, полученные из std::out_of_range, бросаются, чтобы указать, какой аспект ввода даты является недействительным. Обратите внимание, что специальное значение «не-дата-время» может использоваться как «недействительная» или «нулевая» дата, если это необходимо.
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o or #include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
Syntax | Description |
---|---|
Example | |
date(greg_year, greg_month, greg_day) | Постройка из частей даты. Выбрасывает bad_year, bad_day_of_month или bad_day_month (производные от std::out_of_range), если год, месяц или день находятся вне диапазона. |
<date d(2002,Jan,10);> | |
date(date d) | Копировать конструктор |
<date d1(d);> | |
date(special_values sv) | Конструктор для бесконечностей, без даты, max_date_time и min_date_time |
<date d1(neg_infin); date d2(pos_infin); date d3(not_a_date_time); date d4(max_date_time); date d5(min_date_time);> | |
date() | Конструктор по умолчанию. Создает объект даты, инициализированный до not_a_date_time. Примечание: этот конструктор может быть отключен путем определения DATE_TIME_NO_DEFAULT_CONSTRUCTOR (см. compiler_config.hpp) |
<date d; // d => not_a_date_time> |
Syntax | Description |
---|---|
Example | |
date from_string(std::string) | Из разграниченной строки даты, где с порядком год-месяц-день например: 2002-1-25 |
<std::string ds("2002/1/25"); date d(from_string(ds));> | |
date from_undelimited_string(std::string) | Из строки даты типа изо, где с заказом год-месяц-день, например: 20020125 |
<std::string ds("20020125"); date d(from_undelimited_string(ds));> |
Syntax | Description |
---|---|
Example | |
day_clock::local_day() | Получите местный день на основе настроек часового пояса компьютера. |
<date d(day_clock::local_day());> | |
day_clock::universal_day() | Получить UTC день. |
<date d(day_clock::universal_day());> |
Syntax | Description |
---|---|
Example | |
greg_year year() const | Получите часть года даты. |
<date d(2002,Jan,10); d.year(); // --> 2002> | |
greg_month month() const | Получить месячные часть даты. |
<date d(2002,Jan,10); d.month(); // --> 1> | |
greg_day day() const | Получить часть дня даты. |
<date d(2002,Jan,10); d.day(); // --> 10> | |
greg_ymd year_month_day() const | Возвращаем структуру год_месяц_день. Более эффективно, когда требуется все 3 части даты. |
<date d(2002,Jan,10); date::ymd_type ymd = d.year_month_day(); // ymd.year --> 2002, // ymd.month --> 1, // ymd.day --> 10> | |
greg_day_of_week day_of_week() const | Получить день недели (воскресенье, понедельник и т.д.) |
<date d(2002,Jan,10); d.day(); // --> Thursday> | |
greg_day_of_year day_of_year() const | Получите день года. Число от 1 до 366 |
<date d(2000,Jan,10); d.day_of_year(); // --> 10> | |
date end_of_month() const | Возвращает<date >объект, установленный на последний день вызывающих объектов текущего месяца. |
<date d(2000,Jan,10); d.end_of_month(); // --> 2000-Jan-31> | |
bool is_infinity() const | Верно, если дата является положительной или отрицательной бесконечностью. |
<date d(pos_infin); d.is_infinity(); // --> true> | |
bool is_neg_infinity() const | Верно, если дата отрицательная бесконечность |
<date d(neg_infin); d.is_neg_infinity(); // --> true> | |
bool is_pos_infinity() const | Верно, если дата положительная бесконечность |
<date d(neg_infin); d.is_pos_infinity(); // --> true> | |
bool is_not_a_date() const | Верна, если значение не является датой |
<date d(not_a_date_time); d.is_not_a_date(); // --> true> | |
bool is_special() const | Возвращается, если есть дата<special_value > |
<date d(pos_infin); date d2(not_a_date_time); date d3(2005,Mar,1); d.is_special(); // --> true d2.is_special(); // --> true d3.is_special(); // --> false> | |
special_value as_special() const | <special_value >или<not_special >, если представленная дата является нормальной датой. |
<> | |
long modjulian_day() const | Возвращает измененный юлианский день на дату. |
<> | |
long julian_day() const | Возвращает юлианский день на дату. |
<> | |
int week_number() const | Возвращает номер недели ISO 8601 на дату. |
<> | |
date end_of_month() const | Возвращает последний день месяца на дату. |
<date d(2000,Feb,1); //gets Feb 29 -- 2000 was leap year date eom = d.end_of_month();> |
Syntax | Description |
---|---|
Example | |
std::string to_simple_string(date d) | <YYYY-mmm-DD >струна, где<mmm >- имя месяца 3 шара. |
<"2002-Jan-01"> | |
std::string to_iso_string(date d) | <YYYYMMDD >где все компоненты целые. |
<"20020131"> | |
std::string to_iso_extended_string(date d) | <YYYY-MM-DD >где все компоненты целые. |
<"2002-01-31"> |
Syntax | Description |
---|---|
Example | |
operator<< | Оператор потока |
<date d(2002,Jan,1); std::cout << d << std::endl;> | |
operator>> | Оператор ввода потока.Примечание:По состоянию на версию 1.33 потоковые операции были значительно улучшены. См.Date Time IO Systemдля подробной информации об исключениях и условиях ошибок. |
date d(not_a_date_time); stringstream ss("2002-Jan-01"); ss >> d; | |
operator==, operator!=, operator>, operator<, operator>=, operator<= | Полный набор операторов сравнения |
<d1 == d2, etc> | |
date operator+(date_duration) const | Возврат даты с добавлением скидки на день |
<date d(2002,Jan,1); date_duration dd(1); date d2 = d + dd;> | |
date operator-(date_duration) const | Возврат даты путем вычитания дневного смещения |
date d(2002,Jan,1); date_duration dd(1); date d2 = d - dd; | |
date_duration operator-(date) const | Возврат даты_длительности путем вычитания двух дат |
<date d1(2002,Jan,1); date d2(2002,Jan,2); date_duration dd = d2-d1;> |
Предусмотрены функции преобразования объекта<date
>в структуру<tm
>и из нее.
Syntax | Description |
---|---|
Example | |
tm to_tm(date) | Функция преобразования объекта<date >в структуру<tm >. Поля<tm_hour >,<tm_min >и<tm_sec >равны нулю. Поля<tm_isdst >установлены на -1. |
date d(2005,Jan,1); tm d_tm = to_tm(d); /* tm_year => 105 tm_mon => 0 tm_mday => 1 tm_wday => 6 (Saturday) tm_yday => 0 tm_hour => 0 tm_min => 0 tm_sec => 0 tm_isddst => -1 */ | |
date date_from_tm(tm datetm) | Функция преобразования структуры<tm >в объект<date >. Поля:<tm_wday >,<tm_yday >,<tm_hour >,<tm_min >,<tm_sec >и<tm_isdst >игнорируются. |
tm d_tm; d_tm.tm_year = 105; d_tm.tm_mon = 0; d_tm.tm_mday = 1; date d = date_from_tm(d_tm); // d => 2005-Jan-01 |
Повышение класса::gregorian::date_duration - это простой подсчет дня, используемый для арифметики сgregorian::date. Продолжительность может быть как положительной, так и отрицательной.
По версии 1_32 класс date_duration был типизирован как дни в бустере::gregorian namespace. В примерах вы найдете дни, используемые вместо даты.
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o or #include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
Syntax | Description |
---|---|
Example | |
date_duration(long) | Создайте счет продолжительности. |
<date_duration dd(3); //3 days> | |
days(special_values sv) | Конструктор для бесконечностей, без даты, max_date_time и min_date_time |
<days dd1(neg_infin); days dd2(pos_infin); days dd3(not_a_date_time); days dd4(max_date_time); days dd5(min_date_time);> |
Syntax | Description |
---|---|
Example | |
long days() const | Подсчитайте день. |
<date_duration dd(3); dd.days() --> 3> | |
bool is_negative() const | Правда, если количество дней меньше нуля. |
<date_duration dd(-1); dd.is_negative() --> true> | |
static date_duration unit() | Возврат наименьшей возможной единицы продолжительности. |
<date_duration::unit() --> date_duration(1)> | |
bool is_special() const | Returns true if days is any special_value |
<days dd(pos_infin); days dd2(not_a_date_time); days dd3(25); dd.is_special(); // --> true dd2.is_special(); // --> true dd3.is_special(); // --> false> |
Syntax | Description |
---|---|
Example | |
operator<<, operator>> | Потоковые операторы.Примечание:По состоянию на версию 1.33 потоковые операции были значительно улучшены. См.Date Time IO Systemдля более подробной информации (включая исключения и условия ошибки). |
date d(not_a_date_time); stringstream ss("2002-Jan-01"); ss >> d; std::cout << d; // "2002-Jan-01" | |
operator==, operator!=, operator>, operator<, operator>=, operator<= | Полный набор операторов сравнения |
<dd1 == dd2, etc> | |
date_duration operator+(date_duration) const | Добавьте продолжительность даты. |
date_duration dd1(3); date_duration dd2(5); date_duration dd3 = dd1 + dd2; | |
date_duration operator-(date_duration) const | Вычтите продолжительность. |
date_duration dd1(3); date_duration dd2(5); date_duration dd3 = dd1 - dd2; |
Эти дополнительные типы являются логическими представлениями промежутков дней.
Syntax | Description |
---|---|
Example | |
months(int num_of_months) | Логическое представление месяца. В зависимости от использования этот<months >объект может охватывать период от 28 до 31 дня. Объекты также используют щелчок для поведения в конце месяца при использовании в сочетании с датой, которая является последним днем данного месяца.Предупреждение: такое поведение может привести к неожиданным результатам.См.Обратимость ловушки операцийдля полных деталей и альтернатив. |
<months single(1); date leap_year(2004,Jan,31); date norm_year(2005,Jan,31); leap_year + single; // => 2004-Feb-29 norm_year + single; // => 2005-Feb-28 date(2005,Jan,1) + single; // => 2005-Feb-01 date(2005,Feb,1) + single; // => 2005-Mar-01 date(2005,Feb,28) + single; // => 2005-Mar-31> | |
years(int num_of_years) | Логическое представление года.<years >объект имеет такое же поведение, как<months >объектов в отношении конца месяца. |
<years single(1); date(2003,Feb,28) + single; // results in => 2004-Feb-29 date(2004,Feb,29) + single; // results in => 2005-Feb-28> | |
weeks(int num_of_weeks) | Длительность, представляющая собой количество<n * 7 >дней. |
<weeks single(1); date(2005,Jan,1) + single; // => 2005-Jan-08> |
Естественное ожидание при добавлении нескольких месяцев к дате, а затем вычитании того же количества месяцев, заключается в том, чтобы закончить именно там, где вы начали. Это чаще всего результат, который дает библиотека<date_time
>, но есть одно существенное исключение: Поведение в конце месяца, осуществляемое типом продолжительностимесяцев. Тип продолжительностимесяцевможет дать неожиданные результаты, когда начальный день является 28-м, 29-м или 30-м в 31-дневный месяц. Этот вопрос не затрагиваетmonth_iteratorи поэтому включен в примеры для иллюстрации возможной альтернативы.
Когда дата начала находится в середине месяца, добавление или вычитание любого количества месяцев приведет к дате, которая является одним и тем же днем месяца (например, если вы начнете с 15-го, вы закончите с 15-го). Когда дата является последним днем месяца, добавление или вычитание любого количества месяцев даст результат, который также является последним днем месяца (например, если вы начнете 31 января, вы приземлитесь 28 февраля, 31 марта и т. Д.).
// using months duration type date d(2005, Nov, 30); // last day of November d + months(1); // result is last day of December "2005-Dec-31" d - months(1); // result is last day of October "2005-Oct-31" // using month_iterator month_iterator itr(d); // last day of November ++itr; // result is last day of December "2005-Dec-31" --itr; // back to original starting point "2005-Nov-30" --itr; // last day of October "2005-Oct-31"
Если дата начала 28-го, 29-го или 30-го числа в 31-дневном месяце, результат добавления или вычитания месяца может привести к неожиданному поведению в конце месяца. Это приведет к тому, что конечный результат будет отличаться от даты начала.
// using months duration type date d(2005, Nov, 29); d += months(1); // "2005-Dec-29" d += months(1); // "2006-Jan-29" d += months(1); // "2006-Feb-28" --> snap-to-end-of-month behavior kicks in d += months(1); // "2006-Mar-31" --> unexpected result d -= months(4); // "2005-Nov-30" --> unexpected result, not where we started // using month_iterator month_iterator itr(date(2005, Dec, 30)); ++itr; // "2006-Jan-30" --> ok ++itr; // "2006-Feb-28" --> snap-to DOES NOT kick in ++itr; // "2006-Mar-30" --> ok --itr; // "2006-Feb-28" --> ok --itr; // "2006-Jan-30" --> ok --itr; // "2005-Dec-30" --> ok, back where we started
Дополнительные типы длительности<months
>,<years
>и<weeks
>предоставляются в качестве удобства и могут быть легко удалены, чтобы гарантировать, что эта ошибка никогда не произойдет. Чтобы удалить эти типы, просто не определите BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES.
Повышение класса::gregorian::date_period обеспечивает прямое представление диапазонов между двумя датами. Периоды дают возможность упростить некоторые виды вычислений за счет упрощения условной логики программы. Например, тестирование, если дата находится в нерегулярном графике, например, в выходные или праздничные дни, может быть выполнено с использованием наборов дат. Этому способствуют несколько методов, которые позволяют оценить, пересекается ли период с другим периодом и генерировать период, возникающий в результате пересечения. Пример расчетапериода датыдает пример этого.
Период, который создается с равными начальной и конечной точками или с нулевой продолжительностью, называется периодом нулевой длины. Периоды нулевой длины считаются недействительными (совершенно законно построить недействительный период). Для этих периодов точка<last
>всегда будет на единицу меньше точки<begin
>.
Периоды дат, используемые в сочетании со значениями бесконечности, могут представлять сложные понятия, такие как «до дальнейшего уведомления».
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o or #include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
Syntax | Description |
---|---|
Example | |
date_period(date, date) | Создайте период (начало, конец). Если конец = начало, то период будет недействительным. |
<date_period dp(date(2002,Jan,10), date(2002,Jan,12));> | |
date_period(date, days) | Создайте период как [начало, начало + len], где конечная точка будет начинаться + len. Если len = 0, то период будет определен как недействительный. |
<date_period dp(date(2002,Jan,10), days(2));> | |
date_period(date_period) | Копировать конструктор |
<date_period dp1(dp);> |
Syntax | Description |
---|---|
Example | |
date_period shift(days) | Добавьте продолжительность как к началу, так и к концу. |
<date_period dp(date(2005,Jan,1), days(3)); dp.shift(days(3)); // dp == 2005-Jan-04 to 2005-Jan-07> | |
date_period expand(days) | Вычтите продолжительность с начала и добавьте продолжительность к концу. |
<date_period dp(date(2005,Jan,2), days(2)); dp.expand(days(1)); // dp == 2005-Jan-01 to 2005-Jan-04> |
Syntax | Description |
---|---|
Example | |
date begin() | Возвращение первого дня периода. |
date_period dp(date(2002,Jan,1), date(2002,Jan,10)); dp.begin() --> 2002-Jan-01 | |
date last() | Возврат последней даты в период |
date_period dp(date(2002,Jan,1), date(2002,Jan,10)); dp.last() --> 2002-Jan-09 | |
date end() | Возвращение за последний период |
date_period dp(date(2002,Jan,1), date(2002,Jan,10)); dp.end() --> 2002-Jan-10 | |
days length() | Возврат продолжительности периода date_period |
date_period dp(date(2002,Jan,1), days(2)); dp.length() --> 2 | |
bool is_null() | Правда, если период плохо сформирован. Конец меньше или равен началу. |
date_period dp(date(2002,Jan,10), date(2002,Jan,1)); dp.is_null() --> true | |
bool contains(date) | Правда, если дата находится в пределах срока. Периоды нулевой длины не могут содержать никаких точек. |
date d(2002,Jan,1); date_period dp(d, date(2002,Jan,10)); dp.contains(date(2002,Jan,2));// true date_period dp2(d, d); dp.contains(date(2002,Jan,1));// false | |
bool contains(date_period) | Верно, если дата находится в пределах периода |
date_period dp1(date(2002,Jan,1), date(2002,Jan,10)); date_period dp2(date(2002,Jan,2), date(2002,Jan,3)); dp1.contains(dp2) --> true dp2.contains(dp1) --> false | |
bool intersects(date_period) | Правда, если периоды пересекаются |
<date_period dp1(date(2002,Jan,1), date(2002,Jan,10)); date_period dp2(date(2002,Jan,2), date(2002,Jan,3)); dp2.intersects(dp1) --> true> | |
date_period intersection(date_period) | Рассчитайте пересечение 2 периодов. Нуль, если нет пересечения. |
date_period dp1(date(2002,Jan,1), date(2002,Jan,10)); date_period dp2(date(2002,Jan,2), date(2002,Jan,3)); dp2.intersection(dp1) --> dp2 | |
date_period is_adjacent(date_period) | Проверьте, являются ли два периода смежными, но не перекрывающимися. |
date_period dp1(date(2002,Jan,1), date(2002,Jan,3)); date_period dp2(date(2002,Jan,3), date(2002,Jan,10)); dp2.is_adjacent(dp1) --> true | |
date_period is_after(date) | Определите период после определенной даты. |
date_period dp1(date(2002,Jan,10), date(2002,Jan,30)); date d(2002,Jan,3); dp1.is_after(d) --> true | |
date_period is_before(date) | Определите период до определенной даты. |
date_period dp1(date(2002,Jan,1), date(2002,Jan,3)); date d(2002,Jan,10); dp1.is_before(d) --> true | |
date_period merge(date_period) | Возвращает союз двух периодов. Нуль, если нет пересечения. |
date_period dp1(date(2002,Jan,1), date(2002,Jan,10)); date_period dp2(date(2002,Jan,9), date(2002,Jan,31)); dp2.merge(dp1) // 2002-Jan-01/2002-Jan-31 | |
date_period span(date_period) | Сочетает два периода и любой разрыв между ними, такой, что начало = мин (p1.begin, p2.begin) и конец = макс (p1.end, p2.end) |
date_period dp1(date(2002,Jan,1), date(2002,Jan,5)); date_period dp2(date(2002,Jan,9), date(2002,Jan,31)); dp2.span(dp1); // 2002-Jan-01/2002-Jan-31 | |
date_period shift(days) | Добавьте продолжительность как к началу, так и к концу. |
date_period dp1(date(2002,Jan,1), date(2002,Jan,10)); dp1.shift(days(1)); // 2002-Jan-02/2002-Jan-11 | |
date_period expand(days) | Вычтите продолжительность с начала и добавьте продолжительность к концу. |
date_period dp1(date(2002,Jan,4), date(2002,Jan,10)); dp1.expand(days(2)); // 2002-Jan-02/2002-Jan-12 |
Syntax | Description |
---|---|
Example | |
std::string to_simple_string(date_period dp) | <[YYYY-mmm-DD/YYYY-mmm-DD] >строка, где<mmm >— 3-угольное имя месяца. |
<[2002-Jan-01/2002-Jan-31]> |
Syntax | Description |
---|---|
Example | |
operator<< | Оператор потока для date_period. Использует грань для форматирования точек времени. Типичный результат: [2002-Jan-01/2002-Jan-31]. |
<std::cout << dp << std::endl;> | |
operator>> | istream оператор для date_period. Использует грань для разбора временных точек. |
<"[2002-Jan-01/2002-Jan-31]"> | |
operator==, operator!=, operator>, operator< | Полный набор операторов сравнения |
<dp1 == dp2, etc> | |
operator< | Правда, если dp1.end() меньше dp2.begin() |
<dp1 < dp2, etc> | |
operator> | Если dp1.begin() больше, чем dp2.end() |
<dp1 > dp2, etc> |
Итераторы дат обеспечивают стандартный механизм итерации через даты. Итераторы дат представляют собой модельДвунаправленного итератораи могут использоваться для заполнения коллекций датами и другими задачами генерации дат. Например, примермесяца печатиповторяет все дни в месяце и печатает их.
Все итераторы здесь происходят от boost::gregorian::date_iterator.
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o or #include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
Syntax | Description |
---|---|
Example | |
date_iterator | Общий (абстрактный) базовый класс для итераторов дневного уровня. |
<> | |
day_iterator(date start_date, int day_count=1) | Итерация<day_count >дней за раз. Этот итератор не предоставляет операторы приращения/декремента. Предоставляются только префиксные операторы. |
<day_iterator day_itr(date(2005,Jan,1)); ++d_itr; // 2005-Jan-02 day_iterator 2day_itr(date(2005,Feb,1),2); ++2d_itr; // 2005-Feb-03> | |
week_iterator(...) Parameters: date start_date int week_offset (defaults to 1) | Итерация<week_offset >недель за раз. Этот итератор не предоставляет операторы приращения/декремента. Предоставляются только префиксные операторы. |
<week_iterator wk_itr(date(2005,Jan,1)); ++wk_itr; // 2005-Jan-08 week_iterator 2wk_itr(date(2005,Jan,1),2); ++2wk_itr; // 2005-Feb-15> | |
month_iterator(...) Parameters: date start_date int month_offset (defaults to 1) | Итерация<month_offset >месяцев. Существуют специальные правила для работы до конца месяца. Если дата начала является последним днем месяца, всегда приспосабливайтесь к последнему дню месяца. Если дата превышает конец месяца (например, 31 января + 1 месяц) откорректируйте до конца месяца (более подробную информацию и примеры этого см.Обратимость ловушки операций.ПРИМЕЧАНИЕ:<month_iterator >не осуществляется этой ловушкой.) Этот итератор не предоставляет операторы приращения/декремента. Предоставляются только префиксные операторы. |
<month_iterator m_itr(date(2005,Jan,1)); ++m_itr; // 2005-Feb-01 month_iterator 2m_itr(date(2005,Feb,1),2); ++2m_itr; // 2005-Apr-01> | |
year_iterator(...) Parameters: date start_date int year_offset (defaults to 1) | Итерационный год_offset годы. Год_iterator всегда приземляется в день параметра даты, за исключением случаев, когда дата 28 февраля в не високосный год. В этом случае итератор вернется 29 февраля на високосные годы (например: 2003-28 февраля, 2004-29 февраля, 2005-28 февраля). Этот итератор не предоставляет операторы приращения/декремента. Предоставляются только префиксные операторы. |
<year_iterator y_itr(date(2005,Jan,1)); ++y_itr; // 2006-Jan-01 year_iterator 2y_itr(date(2005,Feb,1),2); ++2y_itr; // 2007-Feb-01> |
Алгоритмы или генераторы дат являются инструментами для генерации других дат или графиков дат. Функция генератора начинается с некоторой части даты, такой как месяц и день, и поставляется другая часть, чтобы затем генерировать конкретную дату. Это позволяет программисту представлять такие понятия, как «Первое воскресенье февраля», а затем создавать конкретный набор дат, когда предоставляется один или несколько лет.Примечание: В версии 1_31_0 изменены имена генераторов дат. Старые имена все еще доступны, но больше не задокументированы и могут быть обесценены.
Также предусмотрены автономные функции для генерации даты или расчета продолжительности дней. Эти функции принимают в качестве параметров объект даты и объект будня.
Все классы и функции генератора дат находятся в бустере::gregorian namespace.
Примердля печатипоказывает подробный пример использования.
#include "boost/date_time/gregorian/gregorian.hpp"
Class and get_date Parameter | Description |
---|---|
Example | |
year_based_generator date get_date(greg_year year) | Объединяющий (абстрактный) тип базы дата_генератора для:<partial_date >,<nth_day_of_the_week_in_month >,<first_day_of_the_week_in_month >и<last_day_of_the_week_in_month >. |
Примердля печатипоказывает подробный пример использования. | |
last_day_of_the_week_in_month(greg_weekday, greg_month) date get_date(greg_year year) | Вычислить что-то вроде последнего понедельника января |
last_day_of_the_week_in_month lwdm(Monday,Jan); date d = lwdm.get_date(2002); //2002-Jan-28 | |
first_day_of_the_week_in_month(greg_weekday, greg_month) date get_date(greg_year year) | Рассчитать что-то вроде первого понедельника января |
first_day_of_the_week_in_month fdm(Monday,Jan); date d = fdm.get_date(2002); //2002-Jan-07 | |
nth_day_of_the_week_in_month(week_num, greg_weekday, greg_month) date get_date(greg_year year) | week_num is a public enum member of nth_day_of_the_week_in_month . Calculate something like first Monday of January, second Tuesday of March, Third Sunday of December, etc. (first through fifth are provided, fifth is the equivalent of last) |
typedef nth_day_of_the_week_in_month nth_dow; nth_dow ndm(nth_dow::third, Monday,Jan); date d = ndm.get_date(2002); //2002-Jan-21 | |
partial_date(greg_day, greg_month) date get_date(greg_year year) | Создает дату, применяя год к данному месяцу и дню. |
partial_date pd(1,Jan); date d = pd.get_date(2002); //2002-Jan-01 | |
first_day_of_the_week_after(greg_weekday) date get_date(date d) | Рассчитать что-то вроде Первого воскресенья после 1 января 2002 года |
first_day_of_the_week_after fdaf(Monday); date d = fdaf.get_date(date(2002,Jan,1)); //2002-Jan-07 | |
first_day_of_the_week_before(greg_weekday) date get_date(date d) | Вычислить что-то вроде первого понедельника до 1 февраля 2002 года. |
first_day_of_the_week_before fdbf(Monday); date d = fdbf.get_date(date(2002,Feb,1)); //2002-Jan-28 |
Function Prototype | Description |
---|---|
Example | |
days days_until_weekday date, greg_weekday) | Вычисляет количество дней с данной даты до данного будня. |
<date d(2004,Jun,1); // Tuesday greg_weekday gw(Friday); days_until_weekday(d, gw); // 3 days> | |
days days_before_weekday(date, greg_weekday) | Вычисляет количество дней от заданной даты до предыдущего заданного будня. |
date d(2004,Jun,1); // Tuesday greg_weekday gw(Friday); days_before_weekday(d, gw); // 4 days | |
date next_weekday(date, greg_weekday) | Создает объект даты, представляющий дату следующего будня от данной даты. Можно вернуть указанную дату. |
date d(2004,Jun,1); // Tuesday greg_weekday gw1(Friday); greg_weekday gw2(Tuesday); next_weekday(d, gw1); // 2004-Jun-4 next_weekday(d, gw2); // 2004-Jun-1 | |
date previous_weekday(date, greg_weekday) | Создает объект даты, представляющий дату предыдущего будня от данной даты. Можно вернуть указанную дату. |
date d(2004,Jun,1); // Tuesday greg_weekday gw1(Friday); greg_weekday gw2(Tuesday); previous_weekday(d, gw1); // 2004-May-28 previous_weekday(d, gw2); // 2004-Jun-1 |
Повышение класса::gregorian::gregorian_calendar реализует функции, необходимые для создания системы грегорианских дат. Он преобразует в год-месяц-дневную форму даты в число дня представления и обратно.
Для большинства целей этот класс просто доступен поgregorian::dateи не используется непосредственно пользователем. Тем не менее, есть полезные функции, которые могут быть полезны, такие как функция конца месяца.
Об этом свидетельствует примермесяца печати.
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o or #include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
Syntax | Description |
---|---|
Example | |
static short day_of_week(ymd_type) | Возвращение дня недели (0== Воскресенье, 1== Понедельник и т.д.) |
См. такжегрегорианский:: датадень_о_недели | |
static date_int_type day_number(ymd_type) | Преобразуйте ymd_type в число дня. Число дня — абсолютное число дней с начала эпохи. |
#160; | |
static short end_of_month_day(year_type, month_type) | Год и месяц определяют последний день месяца. |
#160; | |
static ymd_type from_day_number(date_int_type) | Преобразуйте число дня в структуру ymd. |
#160; | |
static bool is_leap_year(year_type) | Возвращается истинным, если указанный год является високосным. |
<gregorian_calendar::is_leap_year(2000) //--> true> |
Статья Gregorian раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 10. Boost.Date_Time может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 10. Boost.Date_Time ::
реклама |