Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Gregorian

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 10. Boost.Date_Time

BoostC++ Libraries

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

PrevUpHomeNext

Gregorian

Gregorian Date System

ВведениеПримеры использования

Introduction

Грегорианская система дат предоставляет систему программирования дат на основе григорианского календаря. Первое введение григорианского календаря было в 1582 году, чтобы исправить ошибку в юлианском календаре. Однако многие местные юрисдикции приняли это изменение только намного позже. Таким образом, существует потенциальная путаница с историческими датами.

Реализованный календарь — это «пролептический григорианский календарь», который восходит к первому принятию григорианского календаря в 1582 году. Текущая реализация поддерживает даты в диапазоне от 1400-Ян-01 до 9999-Дек-31. Многие ссылки будут представлять даты до 1582 года с использованием юлианского календаря, поэтому следует соблюдать осторожность, если требуются точные расчеты в исторические даты. Видишь?Календарные расчетыReingold & Dershowitz для более подробной информации. Информация о дате из календарных расчетов использовалась для перекрестной проверки правильности выполнения григорианского календаря.

Все типы грегорианской системы находятся в пространстве имен::gregorian. Библиотека поддерживает удобный заголовок boost/date_time/gregorian/gregorian_types.hpp, который будет включать в себя все классы библиотеки без зависимости от ввода/вывода. Другой заголовок boost/date_time/gregorian/gregorian.hpp будет включать в себя типы и код ввода/вывода.

КлассПовышение::gregorian:::dateявляется основным временным типом для пользователей. Если вы заинтересованы в изучении написания программ, которые делают специализированные вычисления даты, такие как поиск «первого воскресенья в апреле», см. генераторы датыи алгоритмы страницы.

Usage Examples

ExampleDescription
Простая арифметика даты. Восстановите текущий день с часов.
Простой анализ и форматирование дат из / в строки
Посмотрите, есть ли дата в наборе периодов даты (например: это праздник / выходные)
Небольшая утилита, которая печатает все дни в месяц из командной строки. Нужно ли знать, был ли 1999-ян-1 пятницей или субботой? Эта программа показывает, как это сделать.
Использует генераторы дат для преобразования абстрактной спецификации в конкретный набор дат.

Date

Introduction -- Header -- Construction -- Construct from String -- Construct from Clock -- Accessors -- Convert to String -- Operators -- Struct tm Functions

Introduction

Повышение класса::gregorian::date является основным интерфейсом для программирования даты. В общем, класс даты неизменен после построения, хотя он позволяет присваивать с другой даты. Методы создания дат включают чтениетекущей даты с часов, использованиеитераторов датиалгоритмов дат или генераторов.

Внутреннее повышение::gregorian::date хранится в виде 32-битного целого типа. Класс специально разработан, чтобы не содержать виртуальных функций. Такая конструкция позволяет эффективно вычислять и использовать память с большим набором дат.

Конструкция даты подтверждает все вводимые данные, так что невозможно построить «недействительную» дату. То есть 2001-29 февраля не может быть построен как дата. Различные исключения, полученные из std::out_of_range, бросаются, чтобы указать, какой аспект ввода даты является недействительным. Обратите внимание, что специальное значение «не-дата-время» может использоваться как «недействительная» или «нулевая» дата, если это необходимо.

Header

#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

Construction

SyntaxDescription
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
>

Construct from String

SyntaxDescription
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));
>

Construct from Clock

SyntaxDescription
Example
day_clock::local_day()
Получите местный день на основе настроек часового пояса компьютера.
<
date d(day_clock::local_day());
>
day_clock::universal_day()
Получить UTC день.
<
date d(day_clock::universal_day());
>

Accessors

SyntaxDescription
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();
>

Convert to String

SyntaxDescription
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"
>

Operators

SyntaxDescription
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;
>

Struct tm Functions

Предусмотрены функции преобразования объекта<date>в структуру<tm>и из нее.

SyntaxDescription
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

Date Duration (aka Days)

Introduction -- Header -- Construction -- Accessors -- Operators -- Additional Duration Types

Introduction

Повышение класса::gregorian::date_duration - это простой подсчет дня, используемый для арифметики сgregorian::date. Продолжительность может быть как положительной, так и отрицательной.

По версии 1_32 класс date_duration был типизирован как дни в бустере::gregorian namespace. В примерах вы найдете дни, используемые вместо даты.

Header

#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

Construction

SyntaxDescription
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);
>

Accessors

SyntaxDescription
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
>

Operators

SyntaxDescription
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;

Additional Duration Types

Эти дополнительные типы являются логическими представлениями промежутков дней.

SyntaxDescription
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
>

Reversibility of Operations Pitfall

Естественное ожидание при добавлении нескольких месяцев к дате, а затем вычитании того же количества месяцев, заключается в том, чтобы закончить именно там, где вы начали. Это чаще всего результат, который дает библиотека<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.

Date Period

Introduction -- Header -- Construction -- Mutators -- Accessors -- Convert to String -- Operators

Introduction

Повышение класса::gregorian::date_period обеспечивает прямое представление диапазонов между двумя датами. Периоды дают возможность упростить некоторые виды вычислений за счет упрощения условной логики программы. Например, тестирование, если дата находится в нерегулярном графике, например, в выходные или праздничные дни, может быть выполнено с использованием наборов дат. Этому способствуют несколько методов, которые позволяют оценить, пересекается ли период с другим периодом и генерировать период, возникающий в результате пересечения. Пример расчетапериода датыдает пример этого.

Период, который создается с равными начальной и конечной точками или с нулевой продолжительностью, называется периодом нулевой длины. Периоды нулевой длины считаются недействительными (совершенно законно построить недействительный период). Для этих периодов точка<last>всегда будет на единицу меньше точки<begin>.

Периоды дат, используемые в сочетании со значениями бесконечности, могут представлять сложные понятия, такие как «до дальнейшего уведомления».

Header

#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

Construction

SyntaxDescription
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);
>

Mutators

SyntaxDescription
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
             
>

Accessors

SyntaxDescription
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

Convert to String

SyntaxDescription
Example
std::string to_simple_string(date_period dp)
<[YYYY-mmm-DD/YYYY-mmm-DD]>строка, где<mmm>— 3-угольное имя месяца.
<
[2002-Jan-01/2002-Jan-31]
>

Operators

SyntaxDescription
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
>

Date Iterators

Introduction -- Header -- Overview

Introduction

Итераторы дат обеспечивают стандартный механизм итерации через даты. Итераторы дат представляют собой модельДвунаправленного итератораи могут использоваться для заполнения коллекций датами и другими задачами генерации дат. Например, примермесяца печатиповторяет все дни в месяце и печатает их.

Все итераторы здесь происходят от boost::gregorian::date_iterator.

Header

#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

Overview

SyntaxDescription
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
>

Date Generators/Algorithms

Date Generators/Algorithms

Introduction -- Header -- Class Overview -- Function Overview

Introduction

Алгоритмы или генераторы дат являются инструментами для генерации других дат или графиков дат. Функция генератора начинается с некоторой части даты, такой как месяц и день, и поставляется другая часть, чтобы затем генерировать конкретную дату. Это позволяет программисту представлять такие понятия, как «Первое воскресенье февраля», а затем создавать конкретный набор дат, когда предоставляется один или несколько лет.Примечание: В версии 1_31_0 изменены имена генераторов дат. Старые имена все еще доступны, но больше не задокументированы и могут быть обесценены.

Также предусмотрены автономные функции для генерации даты или расчета продолжительности дней. Эти функции принимают в качестве параметров объект даты и объект будня.

Все классы и функции генератора дат находятся в бустере::gregorian namespace.

Примердля печатипоказывает подробный пример использования.

Header

#include "boost/date_time/gregorian/gregorian.hpp"

Overview

Class and get_date ParameterDescription
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 Overview

Function PrototypeDescription
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 Calendar

Introduction -- Header -- Functions

Introduction

Повышение класса::gregorian::gregorian_calendar реализует функции, необходимые для создания системы грегорианских дат. Он преобразует в год-месяц-дневную форму даты в число дня представления и обратно.

Для большинства целей этот класс просто доступен поgregorian::dateи не используется непосредственно пользователем. Тем не менее, есть полезные функции, которые могут быть полезны, такие как функция конца месяца.

Об этом свидетельствует примермесяца печати.

Header

#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

Functions

SyntaxDescription
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
>

PrevUpHomeNext

Статья Gregorian раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 10. Boost.Date_Time может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 10. Boost.Date_Time ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:47:03/0.0363450050354/1