![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Posix TimeBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 10. Boost.Date_Time
|
Example | Description |
---|---|
Математика времени | Несколько простых вычислений с использованием ptime и time_durations. |
Часы печати | Извлеките время из часов, используйте Time_iterator. |
Местная конверсия UTC | Демонстрирует несколько различных способов преобразования местного времени в UTC, включая правила экономии дневного света. |
Периоды времени | Некоторые простые примеры пересечения и отображения временных периодов. |
Повышение класса::posix_time::ptime является основным интерфейсом для манипулирования точками времени. В общем, класс ptime неизменен после построения, хотя он и допускает назначение.
Класс ptime зависит от gregorian::date для интерфейса с датой части точки времени.
Другие методы для создания времени включают итераторы времени .
#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
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 |
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) |
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()); |
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 |
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 |
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 |
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;//отрицательный результат |
Предусмотрены функции преобразования объектов 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 |
Повышение класса::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
#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
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) |
Конструктор специальных ценностей. Важное примечание: Когда временная продолжительность является особым значением, либо по конструкции, либо другими способами, следующие функции аксессуара дадут непредсказуемые результаты: часы(), минуты(), секунды(), клещи(), дробные_секунды(), полные_наносекунды(), полные_микросекунды(), полные_миллисекунды(), полные_секунды()Остальные функции аксессуара будут работать так, как ожидалось. |
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); |
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)); |
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 |
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 |
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); |
Функция преобразования 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 */ |
Повышение класса::posix_time::time_period обеспечивает прямое представление для диапазонов между двумя временами. Периоды дают возможность упростить некоторые виды вычислений за счет упрощения условной логики программы.
Период, который создается с равными начальной и конечной точками или с нулевой продолжительностью, называется периодом нулевой длины. Периоды нулевой длины считаются недействительными (совершенно законно построить недействительный период). Для этих периодов точка last
всегда будет на единицу меньше, чем точка begin
.
Пример временных периодов представляет собой пример использования временных периодов.
#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
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); |
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 |
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; |
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] // строка занимает одну строку |
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 напрямую сопоставимы с экземплярами 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; } }
#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
Class | Description |
---|---|
Construction Parameters | |
time_iterator |
Итеративное увеличение по указанной продолжительности. |
ptime start_time, time_durationcrement |
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 |
Статья Posix Time раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 10. Boost.Date_Time может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 10. Boost.Date_Time ::
реклама |