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

Posix Time

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

Posix Time

Posix Time System

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

Introduction

Определяет нерегулируемую систему времени с наносекундным/микросекундным разрешением и стабильными расчетными свойствами. Опция наносекундного разрешения использует 96 бит базового хранилища для каждого ptime, в то время как микросекундное разрешение использует 64 бита на ptime (см. Опции сборки для деталей). Эта система времени использует григорианский календарь для реализации части времени представления даты.

Usage Examples

Example Description
Математика времени Несколько простых вычислений с использованием ptime и time_durations.
Часы печати Извлеките время из часов, используйте Time_iterator.
Местная конверсия UTC Демонстрирует несколько различных способов преобразования местного времени в UTC, включая правила экономии дневного света.
Периоды времени Некоторые простые примеры пересечения и отображения временных периодов.

Ptime

Introduction -- Header -- Construction -- Construct from String -- Construct from Clock -- Construct using Conversion functions -- Accessors -- Conversion To String -- Operators -- Struct tm, time_t, and FILETIME Functions

Introduction

Повышение класса::posix_time::ptime является основным интерфейсом для манипулирования точками времени. В общем, класс ptime неизменен после построения, хотя он и допускает назначение.

Класс ptime зависит от gregorian::date для интерфейса с датой части точки времени.

Другие методы для создания времени включают итераторы времени .

Header

#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types

Construction

Syntax Description
Example
ptime(date,time_duration)
Постройка с даты и смещения
ptime t1(date(2002,Jan,10), time_duration(1,2,3)); ptime t2(date(2002,Jan,10), hours(1)+nanosec(5);
ptime(ptime)
Копировать конструктор
ptime t3(t1)<1
ptime(special_values sv)
Конструктор для бесконечностей, без даты, max_date_time и min_date_time
ptime d1(neg_infin); ptime d2(pos_infin); ptime d3(not_a_date_time); ptime d4(max_date_time); ptime d5(min_date_time);
ptime;
Конструктор по умолчанию. Создает объект ptime, инициализированный до not_a_date_time. Примечание: этот конструктор может быть отключен путем определения DATE_TIME_NO_DEFAULT_CONSTRUCTOR (см. compiler_config.hpp)
ptime p; // p => not_a_date_time

Construct from String

Syntax Description
Example
ptime time_from_string(std::string)
Из разграниченной струны. ПРИМЕЧАНИЕ: Чрезмерные цифры за доли секунды будут сброшены. Ex: "1:02:03.123456999" => 1:02:03.123456. На такое поведение влияет точность, с которой компилируется библиотека (см. Информация о сборке-компиляторе).
std::string ts("2002-01-20 23:59:59.000"); ptime t(time_from_string(ts))
ptime from_iso_string(std::string)
Из неограниченной изо-формы струны.
std::string ts("20020131T235959"); ptime t(from_iso_string(ts)

Construct from Clock

Syntax Description
Example
ptime second_clock::local_time()
Получите локальное время, разрешение второго уровня, исходя из настроек часового пояса компьютера.
ptime t(second_lock::local_time());
ptime second_clock::universal_time()
Найдите время UTC.
ptime t(second_clock::universal_time())
ptime microsec_clock::local_time()
Получите местное время с помощью часов второго разрешения. На системах Unix это реализовано с помощью GetTimeOfDay. На большинстве платформ Win32 он реализован с использованием ftime. Системы Win32 часто не достигают микросекундного разрешения через этот API. Если более высокое разрешение имеет решающее значение для вашего приложения, протестируйте свою платформу, чтобы увидеть достигнутое разрешение.
ptime t(microsec_lock::local_time());
ptime microsec_clock::universal_time()
Получите время UTC с помощью часов второго разрешения. На системах Unix это реализовано с помощью GetTimeOfDay. На большинстве платформ Win32 он реализован с использованием ftime. Системы Win32 часто не достигают микросекундного разрешения через этот API. Если более высокое разрешение имеет решающее значение для вашего приложения, протестируйте свою платформу, чтобы увидеть достигнутое разрешение.
ptime t(microsec_lock::universal_time());

Construct using Conversion Functions

Syntax Description
Example
ptime from_time_t(time_t t);
Преобразует время t в ptime.
ptime t = от_time_t(tt);
ptime from_ftime<ptime>(FILETIME ft);
Создает объект ptime из структуры FILETIME.
ptime t = от_ftime(ft);<1

Accessors

Syntax Description
Example
date date()
Получить дату часть времени.
date d(2002,Jan,10); ptime t(d, hour(1)); t.date() --> 2002-Jan-10;
time_duration time_of_day()
Получите смещение времени в течение дня.
date d(2002,Jan,10); ptime t(d, hour(1)); t.time_of_day() --> 01:00:00;
bool is_infinity() const
Возвращается истинно, если ptime является положительной или отрицательной бесконечностью
ptime pt(pos_infin); pt.is_infinity(); // --> true
bool is_neg_infinity() const
Верно, если ptime отрицательная бесконечность
ptime pt(neg_infin); pt.is_neg_infinity(); // --> true
bool is_pos_infinity() const
Верно, если ptime - положительная бесконечность
ptime pt(neg_infin); pt.is_pos_infinity(); // --> true
bool is_not_a_date_time() const
Верна, если значение не является ptime
ptime pt(not_a_date_time); pt.is_not_a_date_time(); // --> true
bool is_special() const
Верно, если ptime имеет значение special_value
ptime pt(pos_infin); ptime pt2(not_a_date_time); ptime pt3(date(2005,Mar,1), hours(10)); pt.is_special(); // --> true pt2.is_special(); // --> true pt3.is_special(); // --> false<1

Conversion to String

Syntax Description
Example
std::string to_simple_string(ptime)
YYYY-mmm-DD HH:MM:SS.fffffffff строка, где mmm 3 char имя месяца. Фракционные секунды включаются только если не ноль.
2002-Ян-01 10:00:01.123456789
std::string to_iso_string(ptime)
Преобразовать в форму YYYYMMDDTHHMMSS,fffffffff, где T является сепаратором даты
20020131T100001,123456789<1
std::string to_iso_extended_string(ptime)
Преобразовать в форму YYYY-MM-DDTHH:MM:SS,fffffffff, где T является сепаратором даты
2002-01-31Т10:00:01,123456789

Operators

Syntax Description
Example
operator<<, operator>>
Потоковые операторы. Примечание: По состоянию на версию 1.33 значительно улучшены потоковые операции. См. Date Time IO System для более подробной информации (включая исключения и условия ошибки).
ptime pt(not_a_date_time); stringstream ss("2002-Jan-01 14:23:11"); ss >> pt; std::cout << pt; // "2002-Jan-01 14:23:11" 
operator==, operator!=,
operator>, operator<,
operator>=, operator<=
Полный набор операторов сравнения
t1 == t2 и т.д.
ptime operator+(days)
Возврат ptime с добавлением дневного смещения
date d(2002,Jan,1); ptime t(d,minutes(5)); days dd(1); ptime t2 = t + dd;
ptime operator-(days)
Возврат ptime вычитания дневного смещения
date d(2002,Jan,1); ptime t(d,minutes(5)); days dd(1); ptime t2 = t - dd;
ptime operator+(time_duration)
Возврат ptime с добавлением времени
date d(2002,Jan,1); ptime t(d,minutes(5); ptime t2 = t + hours(1) + minutes(2);
ptime operator-(time_duration)
Возврат времени, вычитающего продолжительность времени
date d(2002,Jan,1); ptime t(d,minutes(5); ptime t2 = t - minutes(2);
time_duration operator-(ptime)
Возьмем разницу между двумя разами.
дата d(2002,Jan,1); ptime t1(d,minutes(5)); ptime t2(d,seconds(5)); time_duration t3 = t2 - t1;//отрицательный результат

Struct tm, time_t, and FILETIME Functions

Предусмотрены функции преобразования объектов posix_time в структуры tm и из них, а также преобразования из time_t и FILETIME.

Syntax Description
Example
tm to_tm(ptime)
Функция преобразования объекта ptime в структуру tm. Поле tm_isdst установлено на -1.
ptime pt(date(2005,Jan,1), time_duration(1,2,3)); tm pt_tm = to_tm(pt); /* tm_year => 105 tm_mon => 0 tm_mday => 1 tm_wday => 6 (суббота) tm_yday => 0 tm_hour => 1 tm_min => 2 tm_sec => -1 */
ptime ptime_from_tm(tm timetm)
Функция преобразования структуры tm в объект ptime. Поля: tm_wday , tm_yday и tm_isdst игнорируются.
tm pt_tm; pt_tm.tm_year = 105; pt_tm.tm_mon = 0; pt_tm.tm_mday = 1; pt_tm.tm_hour = 1; pt_tm.tm_min = 2; pt_tm.tm_sec = 3; ptime pt = ptime_from_tm(pt_tm); // pt => 2005-Jan-01 01:02:03
tm to_tm(time_duration)
Функция преобразования объекта time_duration в структуру tm. Поля: tm_year, tm_mon, tm_mday, tm_wday, tm_yday установлены на ноль. Поле tm_isdst установлено на -1.
time_duration td(1,2,3); tm td_tm = to_tm(td); /* tm_year => 0 tm_mday => 0 tm_wday => 0 tm_yday => 0 tm_yday => 0 tm_hour => 1 tm_min => 2 tm_sec => 3 tm_isddst =>-1 */
ptime from_time_t(std::time_t)
Создает ptime из параметра time_t. Секунды, удерживаемые в time_t, добавляются к точке времени 1970-01 января.
ptime pt(not_a_date_time); std::time_t t; t = 1118158776; pt = from_time_t(t); // pt => 2005-Jun-07 15:39:36
ptime from_ftime<ptime>(FILETIME)
Функция шаблона, которая создает ptime из структуры FILETIME.
FILETIME ft; ft.dwHighDateTime = 29715317; ft.dwLowDateTime = 3865122988UL; ptime pt = от_ftime(ft); // pt => 2005-Jun-07 15:30:57.039582000

Time Duration

Introduction -- Header -- Construction -- Count Based Construction -- Construct from String -- Accessors -- Conversion To String -- Operators -- Struct tm Functions

Introduction

Повышение класса::posix_time::time_duration - базовый тип, отвечающий за представление продолжительности времени. Продолжительность может быть как положительной, так и отрицательной. Общий класс time_duration предоставляет конструктор, который берет счет количества часов, минут, секунд и дробных секунд, как показано в фрагменте кода ниже. Разрешение time_duration настраивается в момент компиляции. Для получения дополнительной информации см. Build-Compiler Information.

using namespace boost::posix_time;
time_duration td(1,2,3,4); //01:02:03.000000004 when resolution is nano seconds
time_duration td(1,2,3,4); //01:02:03.000004 when resolution is micro seconds

Несколько небольших классов помощников, которые вытекают из базового времени_продолжительность, как показано ниже, чтобы адаптироваться к различным разрешениям. Эти классы могут сократить код и сделать намерение более ясным.

Как пример:

using namespace boost::posix_time;
      
time_duration td = hours(1) + seconds(10); //01:00:01
td = hours(1) + nanoseconds(5); //01:00:00.000000005

Обратите внимание, что наличие классов с более высоким разрешением (например, наносекунды) зависит от установки библиотеки. Для получения дополнительной информации см. Build-Compiler Information.

Другой способ справиться с этим — использовать метод ticks_per_second() для написания переносимого кода независимо от того, как компилируется библиотека. Общее уравнение для вычисления независимого счета разрешения выглядит следующим образом:

count*(time_duration_ticks_per_second / count_ticks_per_second)
    

Например, предположим, что мы хотим построить, используя счет, который представляет десятые доли секунды. То есть каждый клещ занимает 0,1 секунды.

int number_of_tenths = 5;
//create a resolution independent count -- divide by 10 since there are 
//10 tenths in a second.  
int count = number_of_tenths*(time_duration::ticks_per_second()/10);
time_duration td(1,2,3,count); //01:02:03.5 //no matter the resolution settings
    

Header

#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types

Construction

Syntax Description
Example
time_duration(hours,
              minutes,
              seconds,
              fractional_seconds)
Постройте длительность из графов. Параметр дробной_секунды представляет собой ряд блоков и поэтому зависит от разрешения, с которым компилируется приложение (см. Информация о сборке-компиляторе). Если аргумент дробных секунд превышает предел компилируемой точности, избыточное значение будет «перенесено» в поле секунд. См. выше методы для создания независимого счета разрешения.
time_duration td(1,2,3,9); //1 ч 2 мин 3 сек 9 наносекунд time_duration td2(1,2,3,123456789); time_duration td3(1,2,3,1000); // с микросекундным разрешением (6 цифр) // td2 => "01:04:06.456789" // td3 => "01:02:03.001000" // с наносекундным разрешением (9 цифр) // td2 => "01:02:03.123456789" // td3 => "01:02:03.000001000"
time_duration(special_value sv)
Конструктор специальных ценностей. Важное примечание: Когда временная продолжительность является особым значением, либо по конструкции, либо другими способами, следующие функции аксессуара дадут непредсказуемые результаты:
часы(), минуты(), секунды(), клещи(), дробные_секунды(), полные_наносекунды(), полные_микросекунды(), полные_миллисекунды(), полные_секунды()
Остальные функции аксессуара будут работать так, как ожидалось.

Count Based Construction

Syntax Description
Example
hours(long)
Количество часов
time_duration td = hours(3);
minutes(long)
Количество минут
time_duration td = minutes(3);
seconds(long)
Количество секунд
time_duration td = seconds(3);
milliseconds(long)
Количество миллисекунд.
time_duration td = миллисекунды(3);
microseconds(long)
Количество микросекунд.
time_duration td = микросекунды(3);
nanoseconds(long)
Количество наносекунд.
time_duration td = наносекунды(3);

Construct from String

Syntax Description
Example
time_duration duration_from_string(std::string)
Из разграниченной струны. ПРИМЕЧАНИЕ: Чрезмерные цифры за доли секунды будут сброшены. Ex: "1:02:03.123456999" => 1:02:03.123456. На такое поведение влияет точность, с которой компилируется библиотека (см. Информация о сборке-компиляторе).
std::string ts("23:59:59.000"); time_duration td(duration_from_string(ts));

Accessors

Syntax Description
Example
long hours()
Получите количество нормализованных часов (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3); time_duration neg_td(-1,2,3); td.hours(); // --> 1 neg_td.hours(); // -->-1
long minutes()
Получите нормализованное количество минут +/-(0..59) (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3); time_duration neg_td(-1,2,3); td.minutes(); // --> 2 neg_td.minutes(); // --> -2
long seconds()
Получить нормированное число секунды +/-(0..59) (даст непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3); time_duration neg_td(-1,2,3); td.seconds(); // --> 3 neg_td.seconds(); // --> -3
long total_seconds()
Получите общее количество секунд, усеченных за любые дробные секунды (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3,10); td.total_seconds(); // --> (1*3600) + (2*60) + 3 == 3723
long total_milliseconds()
Получите общее количество миллисекунд, усеченных любыми оставшимися цифрами (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3,123456789); td.total_milliseconds(); // HMS --> (1*3600) + (2*60) + 3 == 3723 секунды // миллисекунды - 3 десятичных места // (3723 * 1000) + 123 == 3723123
long total_microseconds()
Получите общее количество микросекунд, усеченных любыми оставшимися цифрами (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3,123456789); td.total_microseconds(); // HMS --> (1*3600) + (2*60) + 3 == 3723 секунды // микросекунды составляют 6 десятичных мест // (3723 * 1000000) + 123456 == 3723123456
long total_nanoseconds()
Получите общее количество наносекунд, усеченных любыми оставшимися цифрами (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3,123456789); td.total_nanoseconds(); // HMS --> (1*3600) + (2*60) + 3 == 3723 секунды // наносекунды составляют 9 десятичных мест // (3723 * 1000000000) + 123456789 // == 3723123456789
long fractional_seconds()
Получите количество дробных секунд (дадут непредсказуемые результаты, если вызов time_duration является special_value).
time_duration td(1,2,3, 1000); td.fractional_seconds(); // --> 1000
bool is_negative()
Правда, если продолжительность отрицательная.
time_duration td(-1,0,0); td.is_negative(); // --> true<1
time_duration invert_sign()
Создайте новую продолжительность с перевернутым знаком
time_duration td(-1,0,0); td.invert_sign(); // --> 01:00:00
date_time::time_resolutions resolution()
Описывает разрешающую способность класса time_duration. Time_resolutions - это список возможностей разрешения от секунд до наносекунд.
time_duration::resolution() --> nano
time_duration::num_fractional_digits()
Возвращает неподписанное короткое удерживание количества дробных цифр, которое имеет разрешение времени.
 неподписанные короткие секунды; секунды = время_продолжительность::num_fractional_digits(); // 9 для нано, 6 для микро и т.д.
time_duration::ticks_per_second()
Верните количество клещей за секунду. Например, если продолжительность поддерживает наносекунды, то возвращаемый результат составит 1000 000 000 (1e + 9).
std::cout << time_duration::ticks_per_second();<1
boost::int64_t ticks()
Возврат необработанного счета типа длительности (приведет к непредсказуемым результатам, если вызов time_duration будет special_value).
time_duration td(0,0,0, 1000); td.ticks() // --> 1000
time_duration unit()
Возврат наименьшей возможной единицы продолжительности (1 наносекунда).
time_duration::unit() --> time_duration(0,0,0,1)
bool is_neg_infinity() const
Возвращается истинно, если время_продолжительность отрицательная бесконечность
time_duration td(neg_infin); td.is_neg_infinity(); // --> true
bool is_pos_infinity() const
Возвращается истинно, если время_продолжительность является положительной бесконечностью
time_duration td(pos_infin); td.is_pos_infinity(); // --> true
bool is_not_a_date_time() const
Верно, если ценность не является временем
time_duration td(not_a_date_time); td.is_not_a_date_time(); // --> true<1
bool is_special() const
Возвращается верно, если время_продолжительность является любым Special_value
time_duration td(pos_infin); time_duration td2(not_a_date_time); time_duration td3(2,5,10); td.is_special(); // --> true td2.is_special(); // --> true td3.is_special(); // --> false<1

Conversion To String

Syntax Description
Example
std::string to_simple_string(time_duration)
Для HH:MM:SS.fffffffff были fff дробные секунды, которые включаются только в случае ненулевого значения.
10:00:01.123456789<1
std::string to_iso_string(time_duration)
Преобразовать в форму HHMMSS,fffffffff.
100001,123456789<1

Operators

Syntax Description
Example
operator<<, operator>>
Потоковые операторы. Примечание: По состоянию на версию 1.33 значительно улучшены потоковые операции. См. Date Time IO System для более подробной информации (включая исключения и условия ошибки).
time_duration td(0,0,0); stringstream ss("14:23:11.345678"); ss>> td; std::cout << td; // "14:23:11.345678" 
operator==, operator!=,
operator>, operator<,
operator>=, operator<=
Полный набор операторов сравнения
dd1 == dd2 и т.д.
time_duration operator+(time_duration)
Добавьте длительности.
time_duration td1(часы (1)+минуты (2)); time_duration td2(секунды (10)); time_duration td3 = td1 + td2;
time_duration operator-(time_duration)
Вычтите продолжительность.
time_duration td1(часы (1)+наносекунды (2)); time_duration td2 = td1 - минуты (1);
time_duration operator/(int)
Разделите длину продолжительности на целое значение. Откажитесь от остатка.
часы (3)/2 == время_продолжительность (1,30,0); наносекунда (3)/2 == наносекунда (1);
time_duration operator*(int)
Умножьте длину продолжительности на целое значение.
часы(3)*2 == часы(6);

Struct tm, time_t, and FILETIME Functions

Функция преобразования time_duration в tm Предоставляется структура.

Syntax Description
Example
tm to_tm(time_duration)
Функция преобразования объекта time_duration в структуру tm. Поля: tm_year, tm_mon, tm_mday, tm_wday, tm_yday установлены на ноль. Поле tm_isdst установлено на -1.
time_duration td(1,2,3); tm td_tm = to_tm(td); /* tm_year => 0 tm_mday => 0 tm_wday => 0 tm_yday => 0 tm_yday => 0 tm_hour => 1 tm_min => 2 tm_sec => 3 tm_isddst =>-1 */

Time Period

Introduction -- Header -- Construction -- Mutators -- Accessors -- Conversion To String -- Operators

Introduction

Повышение класса::posix_time::time_period обеспечивает прямое представление для диапазонов между двумя временами. Периоды дают возможность упростить некоторые виды вычислений за счет упрощения условной логики программы.

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

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

Header

#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types

Construction

Syntax Description
Example
time_period(ptime,
            ptime)
Создайте период (начало, конец). Если конец = начало, то период будет определен как недействительный.
date d(2002,Jan,01); ptime t1(d, seconds(10)); //10 sec after midnight ptime t2(d, hours(10)); //10 hours after midnight time_period tp(t1, t2);
time_period(ptime, 
            time_duration)
Создайте период как [начало, начало+лин], где концом будет начало+лин. Если len = 0, то период будет определен как недействительный.
date d(2002,Jan,01); ptime t(d, seconds(10)); //10 sec after midnight time_period tp(t, hours(3));
time_period(time_period rhs)
Копировать конструктор
time_period tp1(tp);

Mutators

Syntax Description
Example
time_period shift(time_duration)
Добавьте продолжительность как к началу, так и к концу.
 time_period tp(ptime(date(2005,Jan,1),hours(1)), hours(2)); tp.shift(minutes(5)); // tp == 2005-Jan-01 01:05:00 to 2005-Jan-01 03:05:00 
time_period expand(days)
Вычтите продолжительность с начала и добавьте продолжительность к концу.
 time_period tp(ptime(date(2005,Jan,1),hours(1)), hours(2)); tp.expand(minutes(5)); // tp == 2005-Jan-01 00:55:00 to 2005-Jan-01 03:05:00 

Accessors

Syntax Description
Example
ptime begin()
Возвращение в первый раз периода.
date d(2002,Jan,01); ptime t1(d, seconds(10)); //10 sec after midnight ptime t2(d, hours(10)); //10 hours after midnight time_period tp(t1, t2); tp.begin(); // --> 2002-Jan-01 00:00:10
ptime last()
Возвращение в последний раз за период
date d(2002,Jan,01); ptime t1(d, seconds(10)); //10 sec after midnight ptime t2(d, hours(10)); //10 hours after midnight time_period tp(t1, t2); tp.last();//-> 2002-Jan-01 09:59:99999999
ptime end()
Возвращение за последний период
date d(2002,Jan,01); ptime t1(d, seconds(10)); //10 sec after midnight ptime t2(d, hours(10)); //10 hours after midnight time_period tp(t1, t2); tp.last(); // --> 2002-Jan-01 10:00:00
time_duration length()
Возвратить продолжительность периода времени.
date d(2002,Jan,01); ptime t1(d); //midnight time_period tp(t1, hours(1)); tp.length() -> 1 час<1
bool is_null()
Правда, если период плохо сформирован. Конец меньше или равен началу.
date d(2002,Jan,01); ptime t1(d, hours(12)); // noon on Jan 1st ptime t2(d, hours(9)); // 9am on Jan 1st time_period tp(t1, t2); tp.is_null(); // true
bool contains(ptime)
Это верно, если время находится в пределах периода. Периоды нулевой длины не могут содержать никаких точек.
date d(2002,Jan,01); ptime t1(d, seconds(10)); //10 sec after midnight ptime t2(d, hours(10)); //10 hours after midnight ptime t3(d, hours(2)); //2 hours after midnight time_period tp(t1, t2); tp.contains(t3); // true time_period tp2(t1, t1); tp2.contains(t1); // false
bool contains(time_period)
Правда, если период находится в пределах периода
time_period tp1(ptime(d,hours(1)), ptime(d,hours(12))); time_period tp2(ptime(d,hours(2)), ptime(d,hours(4))); tp1.contains(tp2); //-> true tp2.contains(tp1); //-> false
bool intersects(time_period)
Правда, если периоды пересекаются
time_period tp1(ptime(d,hours(1)), ptime(d,hours(12))); time_period tp2(ptime(d,hours(2)), ptime(d,hours(4))); tp2.intersects(tp1); //-> true
time_period intersection(time_period)
Рассчитайте пересечение 2 периодов. Нуль, если нет пересечения.
#160;
time_period merge(time_period)
Возвращает союз двух периодов. Нуль, если нет пересечения.
#160;
time_period span(time_period)
Сочетает два периода и любой разрыв между ними, такой, что начало = мин (p1.begin, p2.begin) и конец = макс (p1.end, p2.end).
#160;

Conversion To String

Syntax Description
Example
std::string 
  to_simple_string(time_period dp)
[YYYY-mmm-DD] hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] строка, где mmm - 3-угольное имя месяца.
[2002-Ян-01 01:25:10.000000001/2002-Ян-31 01:25:10.123456789] // строка занимает одну строку

Operators

Syntax Description
Example
operator<<
Вывод потокового оператора на время. Использует facet для вывода [date time_of_day/date time_of_day]. Формат по умолчанию [YYYY-mmm-DD] hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] строка, где mmm - это 3-угольное имя месяца, а дробные секунды остаются за нулем.
 [2002-Ян-01 01:25:10,000000001/\ 2002-Ян-31 01:25:10.123456789]
operator>>
Оператор потокового ввода на время. Использует facet для чтения [date time_of_day/date time_of_day]. Формат по умолчанию [YYYY-mmm-DD] hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] строка, где mmm - это 3-угольное имя месяца, а дробные секунды остаются за нулем.
 [2002-Ян-01 01:25:10,000000001/\ 2002-Ян-31 01:25:10.123456789]
operator==, operator!=
Операторы равенства. Периоды равны, если p1.begin == p2.begin && p1.last == p2.last
 если (tp1 == tp2) {...
operator<
Заказ без перекрытия. Правда, если tp1.end() меньше, чем tp2.begin()
if (tp1 < tp2) {...
operator>
Заказ без перекрытия. Если tp1.begin() больше, чем tp2.end()
 если (tp1 > tp2) {... и т.д.
operator<=, operator>=
Определены в терминах других операторов.
#160;

Time Iterators

Introduction -- Header -- Overview -- Operators

Introduction

Итераторы времени обеспечивают механизм итерации во времени. Итераторы времени похожи на Бинаправленные итераторы. Однако итераторы времени отличаются от стандартных итераторов тем, что не существует базовой последовательности, а только функция вычисления. Кроме того, Time_iterators напрямую сопоставимы с экземплярами class ptime. Таким образом, второй итератор для конечной точки итерации не требуется, а может использоваться непосредственно. Например, следующий код итерируется с использованием 15-минутного интервала итерации. Пример print hours также иллюстрирует использование Time_iterator.

      
	#include "boost/date_time/posix_time/posix_time.hpp"
	#include <iostream>
	int
	main()
	{
	  using namespace boost::gregorian;
	  using namespace boost::posix_time;
	  date d(2000,Jan,20);
	  ptime start(d);
	  ptime end = start + hours(1);
	  time_iterator titr(start,minutes(15)); //increment by 15 minutes
	  //produces 00:00:00, 00:15:00, 00:30:00, 00:45:00
	  while (titr < end) {
	    std::cout << to_simple_string(*titr) << std::endl;
	    ++titr;
	  }
	  std::cout << "Now backward" << std::endl;
	  //produces 01:00:00, 00:45:00, 00:30:00, 00:15:00
	  while (titr > start) {
	    std::cout << to_simple_string(*titr) << std::endl;
	    --titr;
	  }
	}
      
    

Header

#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types

Overview

Class Description
Construction Parameters
time_iterator
Итеративное увеличение по указанной продолжительности.
ptime start_time, time_durationcrement

Operators

Syntax Description
Example
operator==(const ptime& rhs),
operator!=(const ptime& rhs),
operator>, operator<,
operator>=, operator<=
Полный набор операторов сравнения
date d(2002,Jan,1); ptime start_time(d, hours(1)); //increment by 10 minutes time_iterator titr(start_time, minutes(10)); ptime end_time = start_time + hours(2); if (titr == end_time) // false if (titr != end_time) // true if (titr >= end_time) // false if (titr <= end_time) // true
prefix increment
Увеличить итератор по заданной продолжительности.
//increment by 10 milli seconds time_iterator titr(start_time, milliseconds(10)); ++titr; // == start_time + 10 milliseconds
prefix decrement
Уменьшение итератора по указанной продолжительности времени.
time_duration td(1,2,3); time_iterator titr(start_time, td); --titr; // == start_time - 01:02:03


PrevUpHomeNext

Статья Posix Time раздела 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:28:43/0.035881042480469/1