|  | 
|      | 
|  | 
| 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строка, гдеmmm3 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 ::
| реклама |