![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Local TimeBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 10. Boost.Date_Time
|
local_date_time — локально скорректированный момент времени |
posix_time_zone - часовой пояс, определяемый строкой posix (например: "EST10EDT,M10.5.0,M3.5.0/03") |
Time_zone_database - получить часовые пояса по регионам из файла .csv (например: Америка / Нью-Йорк) |
Time_zone - абстрактный интерфейс часового пояса |
Вместе эти расширения определяют систему времени, скорректированную для записи времени, связанного с конкретным местоположением Земли. Эта система времени использует все функции и преимущества системы posix_time (см.posix_timeдля полных деталей). Он использует объект time_zone, который содержит все необходимые данные/правила для внесения изменений в различные часовые пояса и из них. Объекты time_zone, используемые в date_time, обрабатываются с помощью boost::shared_ptr
Фраза «стенные часы» относится к времени, которое будет отображаться на настенных часах в определенном часовом поясе в любой момент времени. Local_time использует объект часового пояса для учета различий в часовых поясах и корректировки экономии дневного света. Например: В то время как 5:00 вечера, 10 октября 2004 года в Сиднее, Австралия, происходит точно в тот же момент, что и 3:00 утра, 10 октября 2004 года в Нью-Йорке, США, разница в 14 часов в настенные часы. Тем не менее, точка во времени всего через день приведет к 16-часовой разнице во времени из-за корректировок экономии дневного света в обоих часовых поясах. Система local_time отслеживает их с помощью точки времени, хранящейся как UTC, и объектов time_zone, которые содержат все необходимые данные для правильного расчета времени настенных часов.
Example | Description |
---|---|
Простой часовой пояс | Примеры использования часового пояса.custom_time_zoneиposix_time_zoneпоказаны. |
Правила дневного света | Простой пример, показывающий создание всех пятитипов dst_calc_rule. |
Секунды с эпохи | Пример, который вычисляет суммарные секунды, прошедшие с эпохи (1970-01 января), используя локальное время. |
Класс Time_zone_base представляет собой абстрактный шаблон базового класса для представления часовых поясов. Часовые пояса представляют собой набор данных и правил, которые предоставляют информацию о часовом поясе. Библиотека date_time обрабатывает time_zones с помощью бустера::shared_ptr
Для удобства класс Time_zone_base типизирован как Time_zone. Все ссылки в документации на time_zone относятся к этому типдефу.
Класс Time_zone_base определяется в заголовке:
#include "boost/date_time/time_zone_base.hpp"
Конструктор по умолчанию предоставляется в классе time_zone_base. В этом базовом классе нет частных членов данных для инициализации.
Параметрами шаблона являются time_type (обычно posix_time::ptime) и CharT (по умолчанию).
Все перечисленные здесь аксессуары являются чисто виртуальными функциями.
Syntax | Description |
---|---|
string_type dst_zone_abbrev(); |
Возвращает аббревиатуру экономии дневного света для представленного часового пояса. |
string_type std_zone_abbrev(); |
Возвращает стандартную аббревиатуру для представленного часового пояса. |
string_type dst_zone_name(); |
Возвращает название дневной экономии для представленного часового пояса. |
string_type std_zone_name(); |
Возвращает стандартное название представленного часового пояса. |
bool has_dst(); |
Возвращается верно, если этот часовой пояс не делает смену дневного света. |
time_type dst_local_start_time(year_type); |
Дата и время экономии дневного света начинаются в данном году. |
time_type dst_local_end_time(year_type); |
The date and time daylight savings time ends in given year. |
time_duration_type base_utc_offset(); |
Количество времени, компенсируемое UTC (обычно в часах). |
time_duration_type dst_offset(); |
Количество времени смещается в течение дневной экономии. |
std::string to_posix_string(); |
Возвращает представление строки часового пояса этого объекта time_zone_base. Подробное описание строки часового пояса см. вposix_time_zone. |
Объект posix_time_zone представляет собой набор данных и правил, которые предоставляют информацию о часовом поясе. Информация, такая как офсет от UTC, это название и аббревиатура, а также правила экономии дневного света, называемыеdst_calc_rules. Эти правила хранятся в виде бустера::shared_ptr
В качестве удобства предоставляется типдеф для shared_ptr
typedef boost::shared_ptr<dst_calc_rules> local_time::dst_calc_rule_ptr;
Posix_time_zone уникален тем, что объект создается из строки часового пояса Posix (IEEE Std 1003.1). Струна часового пояса POSIX принимает форму:
«std offset dst [offset], start[/time],end[/time]» (w/no spaces).
«std» обозначает аббревиатуру часового пояса. «Зачет» — это смещение от UTC. «dst» определяет аббревиатуру часового пояса в течение времени экономии дневного света. Вторым смещением является то, сколько часов изменилось во время DST. «Начало» и «конец» — это даты, когда DST вступает в силу. «Зачет» принимает форму:
[+ |-]hh[:mm[:ss]] {h=0-23, m/s=0-59]
«Время» и «время» имеют одинаковую форму. «Начало» и «конец» могут быть одной из трех форм:
Mm.w.d {month=1-12, week=1-5 (5 is всегда last), day=0-6}
Jn {n=1-365 Feb29 is ever counted}
n {n=0-365 Feb29 is counted in leap years}
Исключения будут сделаны при следующих условиях:
Как указывалось выше, части строки "offset" и "/time" не требуются. Если они не предоставлены, они по умолчанию до 01:00 для «зачета» и 02:00 для обоих случаев «/времени».
Вот несколько примеров:
"PST-8PDT01:00:00,M4.1.0/02:00:00,M10.1.0/02:00:00"
"PST-8PDT,M4.1.0,M10.1.0
На самом деле эти два стандарта имеют одинаковую спецификацию (во второй строке использовались по умолчанию). Эта зона находится в восьми часах к западу от GMT и делает часовой сдвиг вперед во время дневного времени экономии. Дневная экономия для этой зоны начинается в первое воскресенье апреля в 2 часа ночи и заканчивается в первое воскресенье октября в 2 часа ночи.
Эта зона настолько проста, насколько это возможно. Эта зона находится в семи часах езды к западу от GMT и не имеет дневной экономии.
«EST10EDT,M10.5.0,M3.5.0/03»
Эта строка описывает часовой пояс для Сиднея. Он находится в десяти часах к востоку от GMT и делает часовой сдвиг вперед во время дневной экономии. Находясь в южном полушарии, экономия дневного света начинается в последнее воскресенье октября в 2 часа ночи и заканчивается в последнее воскресенье марта в 3 часа ночи.
"FST+3FDT02:00,J60/00,J304/02"
Эта спецификация описывает фиктивную зону, которая находится в трех часах езды к востоку от GMT. Он делает двухчасовую смену вперед для экономии дневного света, которая начинается 1 марта в полночь и заканчивается 31 октября в 2 часа ночи. Обозначение «J» в спецификациях «старт/конец» означает, что подсчет начинается с одного и 29 февраля никогда не считается.
«FST+3FDT,59,304»
Эта спецификация является важной из-за «59». Отсутствие буквы «J» для начальной и конечной дат указывает на то, что юлианский дневной счет начинается с нуля и заканчивается на 365. Если вы сделаете математику, вы увидите, что это позволяет в общей сложности 366 дней. Это хорошо в високосные годы, но в не високосные годы 59 (29 февраля) не существует. Это позволит создать действительный posix_ Объект time_zone, но исключение будет выброшено, если дата '59' будет доступна в год без скачка. Экс:
posix_time_zone leap_day(std::string("FST+3FDT,59,304")); leap_day.dst_local_start_time(2004); // ok leap_day.dst_local_start_time(2003); // Exception thrown
Объекты posix_time_zone используются через усилитель::shared_ptr
typedef boost::shared_ptr<time_zone_base> local_time::time_zone_ptr;
См.Простой часовой поясдля параллельного примера использования time_zone и posix_time_zone.
Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.
#include "boost/date_time/local_time/local_time.hpp"
Syntax | Example |
---|---|
posix_time_zone(std::string) |
<std::string nyc("EST-5EDT,M4.1.0,M10.5.0"); time_zone_ptr zone(new posix_time_zone(nyc));> |
Syntax | Description |
---|---|
Example | |
std::string dst_zone_abbrev() |
Возвращает аббревиатуру экономии дневного света для представленного часового пояса. |
<nyc_zone_sh_ptr->dst_zone_abbrev(); // "EDT"> | |
std::string std_zone_abbrev() |
Возвращает стандартную аббревиатуру для представленного часового пояса. |
<nyc_zone_sh_ptr->std_zone_abbrev(); // "EST"> | |
std::string dst_zone_name() |
Возвращает экономию дневного света для представленного часового пояса. |
<nyc_zone_sh_ptr->dst_zone_name(); // "EDT"> | |
std::string std_zone_name() |
Возвращает стандартное название представленного часового пояса. |
<nyc_zone_sh_ptr->std_zone_name(); // "EST"> | |
bool has_dst() |
Возвращается истинным, когда общие правила time_zone_ptr-dst_calc_rules не являются NULL. |
<nyc_zone_sh_ptr->has_dst(); // true phx_zone_sh_ptr->has_dst(); // false> | |
ptime dst_local_start_time(greg_year) |
Дата и время экономии дневного света начинаются в данном году. Возвращает не_a_date_time, если в этой зоне нет дневной экономии. |
<nyc_zone_sh_ptr->dst_local_start_time(2004); // 2004-Apr-04 02:00> | |
ptime dst_local_end_time(greg_year) |
Дата и время экономии дневного света заканчивается в данном году. Возвращает не_a_date_time, если в этой зоне нет дневной экономии. |
<nyc_zone_sh_ptr->dst_local_end_time(2004); // 2004-Oct-31 02:00> | |
time_duration base_utc_offset() |
Количество времени, компенсируемое UTC (обычно в часах). |
<nyc_zone_sh_ptr->base_utc_offset(); // -05:00> | |
posix_time::time_duration dst_offset() |
Количество времени смещается в течение дневной экономии. |
<nyc_zone_sh_ptr->dst_offset(); // 01:00> | |
std::string to_posix_string() |
Возвращает представление строки часового пояса этого объекта time_zone_base. В зависимости от того, как был создан объект time_zone, формат спецификации даты строки будет либо в нотации «M», либо в нотации «n». Все возможные спецификации даты, которые могут быть представлены в обозначении «J», также могут быть представлены в обозначении «n». Обратное не соответствует действительности, поэтому для этих типов дат используется только обозначение «n». Подробное описание строки часового пояса см. вposix_time_zone. |
<nyc_zone_sh_ptr->to_posix_string(); // "EST-05EDT+01,M4.1.0/02:00,M10.5.0/02:00" phx_zone_sh_ptr->to_posix_string(); // "MST-07"> |
Система local_time зависит от возможности хранения информации о часовом поясе. Наша база данных часового пояса (tz_database) является средством постоянного хранения этих данных. Предусмотрены спецификации для многих часовых поясов (377 на данный момент). Эти спецификации основаны на данных, найденных в базе данныхZoneinfo. Спецификации хранятся в файле:
libs/date_time/data/date_time_zonespec.csv
. Несмотря на то, что этот файл уже содержит спецификации для многих часовых поясов, пользователь намерен изменить его, добавив (или удалив) часовые пояса в соответствии с их приложением.Подробности файлов данных, чтобы узнать, как это делается.
Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.
#include "boost/date_time/local_time/local_time.hpp"
Единственный конструктор не принимает аргументов и создает пустую базу данных. Пользователь должен заполнить базу данных. Обычно это достигается загрузкой желаемого файла данных, но также может быть достигнуто с помощью функции<add_record(...)
>(см. таблицуАксессуаров).<local_time::data_not_accessible
>Исключение будет выброшено, если данный файл Zonespec не может быть найден.<local_time::bad_field_count
>Исключение будет выброшено, если число полей в заданном файле Zonespec неверно.
Syntax | Description |
---|---|
tz_database() |
Конструктор создает пустую базу данных. |
<tz_database tz_db;> | |
bool load_from_file(std::string) |
Параметр - путь к файлу spec csv часового пояса (см.) Детали файла данныхдля получения подробной информации о содержании этого файла. Эта функция заполняет базу данных записями часовых поясов, найденными в файле спецификации зоны.<local_time::data_not_accessible >Исключение будет выброшено, если данный файл Zonespec не может быть найден.<local_time::bad_field_count >Исключение будет выброшено, если число полей в заданном файле Zonespec неверно. |
<tz_database tz_db; tz_db.load_from_file("./date_time_zonespec.csv");> |
Syntax | Description |
---|---|
Example | |
bool tz_db.add_record(std::string id, time_zone_ptr tz); |
В базу данных добавляется Time_zone или posix_time_zone. ID - это региональное название этой зоны (Ex: «Америка / Феникс»). |
<time_zone_ptr zone( new posix_time_zone("PST-8PDT,M4.1.0,M10.1.0") ); std::string id("America/West_Coast"); tz_db.add_record(id, zone);> | |
time_zone_ptr tz_db.time_zone_from_region(string id); |
Возвращает Time_zone через Time_zone_ptr, который соответствует области, указанной в файле данных. Нулевой указатель возвращается, если совпадение не найдено. |
<time_zone_ptr nyc = tz_db.time_zone_from_region("America/New_York");> | |
vector<string> tz_db.region_list(); |
Возвращает стандартное название представленного часового пояса. |
<std::vector<std::string> regions; regions = tz_db.region_list();> |
Файл csv, содержащий Zone_specs, используемый усилителем::local_time::tz_database, предназначен для настройки пользователем библиотеки. При настройке этого файла (или создании собственного) файл должен следовать определенному формату.
Предполагается, что эта первая строка содержит заголовки колонок и поэтому не обрабатывается базой данных tz_data.
Каждая запись (линия) должна иметь одиннадцать полей. Некоторые из них могут быть пустыми. Каждое поле (даже пустое) должно быть заключено в двойные цитаты.
& #160; Ex:
& #160; «Америка/Феникс» string in in in in empty
Некоторые поля представляют собой промежуток времени. Формат этих полей должен быть:
»{+ |-}hh:mm[:ss]» <- length-of-time format
где плюс или минус является обязательным, а секунды необязательными.
Поскольку некоторые часовые пояса не используют экономию дневного света, не всегда необходимо, чтобы каждое поле в спецификации зоны содержало значение. Все спецификации Zone_specs должны иметь смещение по меньшей мере ID и GMT. Зоны, которые используют экономию дневного света, должны иметь все поля, за исключением: STD ABBR, STD NAME, DST NAME. Обратите внимание, что DST ABBR является обязательным для зон, которые используют экономию дневного света (см. описание поля для более подробной информации).
Содержит идентифицирующую строку для Zone_spec. Любая струна будет работать, пока она уникальна. Нет двух одинаковых идентификаторов.
Все эти четыре названия и аббревиатуры используются для описания часового пояса. В то время как любая струна будет делать в этих областях, следует соблюдать осторожность. Эти поля содержат строки, которые будут использоваться на выходе многих классов local_time.
Это количество часов, добавленных в utc, чтобы получить местное время до внесения каких-либо корректировок экономии дневного света. Примерами являются: Америка/Нью_Йорк офсет -5 часов, Африка/Кайро офсет +2 часа. Формат должен соответствовать формату продолжительности времени, описанному выше.
Количество времени, добавленное к gmt_offset, когда экономия дневного света в силе. Формат должен соответствовать формату продолжительности времени, описанному выше.
ПРИМЕЧАНИЕ: требуется больше возможностей правил - эта часть базы данных tz_data является неполной
Это специально отформатированная строка, описывающая день года, в который происходит переход. Он содержит три собственных поля, разделенных полуколонами.
Примеры: «-1;5;9» = «Последняя пятница сентября», «2;1;3» = «Второй понедельник марта»
Время начала — это количество часов, прошедших за полночь, в день стартового перехода происходит переход. Проще говоря, время суток перехода выполнено (в формате 24 часа). Формат должен соответствовать описанному выше формату длительности времени, за исключением того, что он всегда должен быть положительным.
См. правило даты начала DST. Разница здесь заключается в том, что заканчивается экономия дневного света (переход на ЗППП).
То же, что время начала.
Пользовательский объект_time_zone представляет собой набор данных и правил, которые предоставляют информацию о часовом поясе. Информация, такая как офсет от UTC, это название и аббревиатура, а также правила экономии дневного света, называемыеdst_calc_rules. Эти правила обрабатываются с помощью повышения::shared_ptr
В качестве удобства предоставляется типдеф для shared_ptr
typedef boost::shared_ptr<dst_calc_rules> local_time::dst_calc_rule_ptr;
Объекты Time_zone используются через усилитель::shared_ptr
typedef boost::shared_ptr<time_zone> local_time::time_zone_ptr;
Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.
#include "boost/date_time/local_time/local_time.hpp"
Конструкция пользовательской зоны времени зависит от четырех объектов: atime_duration, atime_zone_names, adst_adjustment_offsetsи shared_ptr to adst_calc_rule.
Syntax | Example |
---|---|
custom_time_zone(...) Parameters: names, gmt_offset, dst_offsets, dst_rules |
simple_time_zoneПример использования time_zone |
Syntax | Description |
---|---|
Example | |
std::string dst_zone_abbrev() |
Возвращает аббревиатуру экономии дневного света для представленного часового пояса. |
<nyc_zone_sh_ptr->dst_zone_abbrev(); // "EDT"> | |
std::string std_zone_abbrev() |
Возвращает стандартную аббревиатуру для представленного часового пояса. |
<nyc_zone_sh_ptr->std_zone_abbrev(); // "EST"> | |
std::string dst_zone_name() |
Возвращает название дневной экономии для представленного часового пояса. |
<nyc_zone_sh_ptr->dst_zone_name(); // "Eastern Daylight Time"> | |
std::string std_zone_name() |
Возвращает стандартное название представленного часового пояса. |
<nyc_zone_sh_ptr->std_zone_name(); // "Eastern Standard Time"> | |
bool has_dst() |
Возвращается истинно, когда пользовательские_time_zone's shared_ptr к dst_calc_rules не являются NULL. |
<nyc_zone_sh_ptr->has_dst(); // true phx_zone_sh_ptr->has_dst(); // false> | |
dst_local_start_time(...) Return Type: ptime Parameter: greg_year |
Дата и время экономии дневного света начинаются в данном году. Возвращает не_a_date_time, если в этой зоне нет дневной экономии. |
<nyc_ptr->dst_local_start_time(2004); // 2004-Apr-04 02:00> | |
dst_local_end_time(...) Return Type: ptime Parameter: greg_year |
Дата и время экономии дневного света заканчивается в данном году. Возвращает не_a_date_time, если в этой зоне нет дневной экономии. |
<nyc_ptr->dst_local_end_time(2004); // 2004-Oct-31 02:00> | |
time_duration base_utc_offset() |
Количество времени, компенсируемое UTC (обычно в часах). |
<nyc_ptr->base_utc_offset(); // -05:00> | |
time_duration dst_offset() |
Количество времени смещается в течение дневной экономии. |
<nyc_zone_sh_ptr->dst_offset(); // 01:00> | |
std::string to_posix_string() |
Возвращает представление строки часового пояса этого объекта time_zone_base. В зависимости от того, как был создан объект time_zone, формат спецификации даты строки будет либо в нотации «M», либо в нотации «n». Все возможные спецификации даты, которые могут быть представлены в обозначении «J», также могут быть представлены в обозначении «n». Обратное не соответствует действительности, поэтому для этих типов дат используется только обозначение «n». Подробное описание строки часового пояса см. вposix_time_zone. |
<nyc_ptr->to_posix_string(); // "EST-05EDT+01,M4.1.0/02:00,M10.5.0/02:00" phx_ptr->to_posix_string(); // "MST-07"> |
Тип Time_zone_names_base представляет собой неизменяемый класс шаблонов из четырех строк. Каждый для названия и аббревиатуры в стандартное время и время экономии дневного света. Time_zone_names type - это типдеф Time_zone_names_base
Syntax | Description |
---|---|
Example | |
time_zone_names(...) Parameters: string std_name string std_abbrev string dst_name string dst_abbrev |
Единственный конструктор, все четыре струны должны быть обеспечены. |
<string sn("Eastern Standard Time"); string sa("EST"); string dn("Eastern Daylight Time"); string da("EDT"); time_zone_names nyc_names(sn, sa, dn, da);> | |
std::string std_zone_name() |
Возвращает название стандартной зоны |
<nyc_names.std_zone_name(); // "Eastern Standard Time"> | |
std::string std_zone_abbrev() |
Возвращает аббревиатуру стандартной зоны |
<nyc_names.std_zone_abbrev(); // "EST"> | |
std::string dst_zone_name() |
Возвращает название зоны экономии дневного света |
<nyc_names.std_zone_name(); // "Eastern Daylight Time"> | |
std::string dst_zone_abbrev() |
Возвращает аббревиатуру зоны дневного света |
<nyc_names.std_zone_abbrev(); // "EDT"> |
Тип dst_adjustment_offsets представляет собой набор из трех объектовtime_duration.
Syntax | Description |
---|---|
Example | |
dst_adjustment_offsets(...) Parameters: time_duration dst_adjust time_duration start_offset time_duration end_offset |
Первый раз_продолжительность - корректировка дневной экономии. Во-вторых, это время, когда экономия дневного света начинается в первый день. В-третьих, экономия дневного света заканчивается в последний день. |
<dst_adjustment_offsets(hours(1), hours(2), hours(2));> |
Правила сбережений дневного света, называемые dst_calc_rules, представляют собой ряд объектов, которые группируют соответствующиегенераторы датвместе, чтобы сформировать наборы правил. Индивидуальные объекты правил используются через dst_calc_rule_ptr.
Полный пример всех пяти типов dst_calc_rule см. впримере calc_rules.
Syntax | Description |
---|---|
partial_date_dst_rule(...) Parameters: start_rule end_rule |
Правила начала и конца имеют тип gregorian::partial_date. |
first_last_dst_rule(...) Parameters: start_rule end_rule |
Правило старта DST имеет тип gregorian::first_day_of_the_week_in_month, а конечное правило типа gregorian::last_day_of_the_week_in_month. |
last_last_dst_rule(...) Parameters: start_rule end_rule |
Как начальные, так и конечные правила типа gregorian::last_day_of_the_week_in_month. |
nth_last_dst_rule(...) Parameters: start_rule end_rule |
Правило старта DST имеет тип gregorian::nth_day_of_the_week_in_month, а конечное правило типа gregorian::last_day_of_the_week_in_month. |
nth_kday_dst_rule(...) Parameters: start_rule end_rule) (see note* below) |
Оба правила являются григорианскими: nth_day_of_the_week_in_month. |
Примечание: название «nth_kday_dst_rule» немного загадочно. Поэтому более описательное название, «nth_day_of_the_week_in_month_dst_rule», также предусмотрено.
Объект local_date_time — точка во времени и соответствующий часовой пояс. Время представлено внутри как UTC.
Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.
#include "boost/date_time/local_time/local_time.hpp"
Создание локального объекта времени с часов возможно либо со вторым, либо с субсекундным разрешением.
Syntax | Example |
---|---|
local_microsec_clock(...) Return Type: local_date_time Parameter: time_zone_ptr |
<time_zone_ptr zone( new posix_time_zone("MST-07") ); local_date_time ldt = local_microsec_clock::local_time( zone);> |
local_sec_clock(...) Return Type: local_date_time Parameter: time_zone_ptr |
<time_zone_ptr zone( new posix_time_zone("MST-07") ); local_date_time ldt = local_sec_clock::local_time(zone);> |
Конструкция объекта local_date_time может быть выполнена с помощью ptime и time_zone_ptr, где ptime представляет время UTC. Конструкция с представлением настенных часов имеет форму даты, времени_длительности, времени_зоны_ptr и четвертого параметра, который учитывает следующее осложнение.
Строительство из настенных часов может привести к различным сдвигам для конкретного часового пояса, в зависимости от правил экономии дневного света для этой зоны. Это означает, что также можно создать локальное время с несуществующим или дублированным представлением UTC. Эти случаи происходят во время переднего сдвига во времени, который является переходом к экономии дневного света, и во время обратного сдвига, который является переходом от экономии дневного света. У пользователя есть два варианта обработки этих случаев: флажок, который указывает, является ли время экономией дневного света, или список, который указывает, что делать, когда один из этих случаев встречается.
Флаг була игнорируется, когда данная зона времени не имеет спецификации экономии дневного света. Когда вычисляется состояние экономии дневного света для данной временной метки и она не соответствует флагу, выкидывают исключение<local_time::dst_not_valid
>. Если срок недействителен (не существует), исключение составляет<local_time::time_label_invalid
>.
Есть два элемента в перечислении<local_date_time::DST_CALC_OPTIONS
>:<EXCEPTION_ON_ERROR
>и<NOT_DATE_TIME_ON_ERROR
>. Возможные исключения составляют<local_time::ambiguous_result
>или<local_time::time_label_invalid
>.<NOT_DATE_TIME_ON_ERROR
>устанавливает временное значение специального значения<local_time::not_a_date_time
>в случае недействительной или двусмысленной метки времени.
Syntax | Description |
---|---|
Example | |
local_date_time(...) Parameters: posix_time::ptime time_zone_ptr |
Ожидается, что данное время будет UTC. Поэтому заданное время будет отрегулировано в соответствии со смещением, описанным в часовом поясе. |
<// 3am, 2004-Nov-05 local time ptime pt(date(2004,Nov,5), hours(10)); time_zone_ptr zone( new posix_time_zone("MST-07")); local_date_time az(pt, zone);> | |
local_date_time(...) Parameters: date time_duration time_zone_ptr bool |
Информация о прошедшем времени понимается в прошедшем ц. Флаг DST должен быть принят, чтобы указать, находится ли время в экономии дневного света или нет. Это может быть<dst_not_valid >или<time_label_invalid >. |
<date d(2004,Nov,5); time_duration td(5,0,0,0); string z("PST-8PDT,M4.1.0,M10.1.0") time_zone_ptr zone( new posix_time_zone(z)); local_date_time nyc(d, td, zone, false);> | |
local_date_time(...) Parameters: date time_duration time_zone_ptr DST_CALC_OPTIONS |
Информация о прошедшем времени понимается в прошедшем ц. Флаг DST рассчитывается по указанному правилу. Может быть,<ambiguous_result >или<time_label_invalid >. |
<date d(2004,Nov,5); time_duration td(5,0,0,0); string z("PST-8PDT,M4.1.0,M10.1.0") time_zone_ptr zone( new posix_time_zone(z)); local_date_time nyc(d, td, zone, NOT_DATE_TIME_ON_ERROR);> | |
local_date_time(local_date_time); |
Копи Конструктор. |
<local_date_time az_2(az);> | |
local_date_time(...) Parameters: special_values time_zone_ptr |
Конструктор специальных ценностей. |
<time_zone_ptr zone( new posix_time_zone("MST-07") ); local_date_time nadt(not_a_date_time, zone); // default NULL time_zone_ptr local_date_time nadt(pos_infin);> |
Syntax | Description |
---|---|
Example | |
time_zone_ptr zone() |
Возврат связанного объекта time_zone через time_zone_ptr |
<> | |
bool is_dst() |
Определяет, находится ли значение времени в DST для ассоциированной зоны. |
#160; | |
ptime utc_time() |
Преобразует значение локального времени в значение UTC. |
<ptime pt(date(2004,Nov,5), hours(10)); time_zone_ptr zone( new posix_time_zone("MST-07")); local_date_time az(pt, zone); az.utc_time(); // 10am 2004-Nov-5> | |
ptime local_time() |
Возвращает местное время для этого объекта (Стены-часы). |
<ptime pt(date(2004,Nov,5), hours(10)); time_zone_ptr zone( new posix_time_zone("MST-07")); local_date_time az(pt, zone); az.utc_time(); // 10am 2004-Nov-5 az.local_time(); // 3am 2004-Nov-5> | |
local_time_in(...) Return Type: local_date_time Parameters: time_zone_ptr time_duration |
Возвращает стандартное название представленного часового пояса. |
<local_date_time nyc = az.local_time_in(nyc_zone); // nyc == 7am 2004-Nov-5> | |
bool is_infinity() const |
Возвращается верно, если local_date_time является положительным или отрицательным бесконечностью. |
<local_date_time ldt(pos_infin); ldt.is_infinity(); // --> true> | |
bool is_neg_infinity() const |
Возвращается верно, если local_date_time отрицательная бесконечность |
<local_date_time ldt(neg_infin); ldt.is_neg_infinity(); // --> true> | |
bool is_pos_infinity() const |
Верно, если local_date_time - положительная бесконечность |
<local_date_time ldt(neg_infin); ldt.is_pos_infinity(); // --> true> | |
bool is_not_a_date_time() const |
Верна, если значение не является датой |
<local_date_time ldt(not_a_date_time); ldt.is_not_a_date_time(); // --> true> | |
bool is_special() const |
Возвращается, если Local_date_time есть<special_value > |
<local_date_time ldt(pos_infin); local_date_time ldt2(not_a_date_time); time_zone_ptr mst(new posix_time_zone("MST-07")); local_date_time ldt3(local_sec_clock::local_time(mst)); ldt.is_special(); // --> true ldt2.is_special(); // --> true ldt3.is_special(); // --> false> |
Syntax | Description |
---|---|
Example | |
operator<< |
Оператор потоковой передачи. Этот оператор является частью V1.33 IO дополнения к date_time. Для получения полной информации об этой функции см.Дата выхода. Выход по умолчанию показан в этом примере. |
<time_zone_ptr zone(new posix_time_zone("MST-07"); local_date_time ldt(date(2005,Jul,4), hours(20), false); std::cout << ldt << std::endl; // "2005-Jul-04 20:00:00 MST"> | |
operator>> |
Оператор потоковой передачи. Этот оператор является частью V1.33 IO дополнения к date_time. Подробнее об этом см.Date Time IO. В это время<local_date_time >объекты могут передаваться в потоковом режиме только с помощью строки Posix Time Zone. Полное описание строки Posix Time Zone можно найти в документации для классаposix_time_zone. |
<stringstream ss; ss.str("2005-Jul-04 20:00:00 MST-07"); ss >> ldt;> | |
operator==, operator!=, operator>, operator<, operator>=, operator<= |
Полный набор операторов сравнения |
<ldt1 == ldt2, etc> | |
operator+, operator+=, operator-, operator-= |
Операторы добавления, вычитания и ярлыка для<local_date_time >и типов продолжительности даты. К ним относятся:<days >,<months >и<years >. |
<ldt + days(5), etc> | |
operator+, operator+=, operator-, operator-= |
Дополнение, вычитание и ярлыки для<local_date_time >и<time_duration >. |
<ldt + hours(5), etc> |
Предусмотрена функция преобразования объекта<local_date_time
>в структуру<tm
>.
Syntax | Description |
---|---|
Example | |
tm to_tm(local_date_time) |
Функция преобразования объекта<local_date_time >в структуру<tm >. |
<// 6am, 2005-Jul-05 local time std::string z("EST-05EDT,M4.1.0,M10.1.0"); ptime pt(date(2005,Jul,5), hours(10)); time_zone_ptr zone( new posix_time_zone(z)); local_date_time ldt(pt, zone); tm ldt_tm = to_tm(ldt); /* tm_year => 105 tm_mon => 6 tm_mday => 5 tm_wday => 2 (Tuesday) tm_yday => 185 tm_hour => 6 tm_min => 0 tm_sec => 0 tm_isddst => 1 */> |
Класс<boost::local_time::local_time_period
>обеспечивает прямое представление для диапазонов между двумя локальными временами. Периоды дают возможность упростить некоторые виды вычислений за счет упрощения условной логики программы.
Период, который создается с равными начальной и конечной точками или с нулевой продолжительностью, называется периодом нулевой длины. Периоды нулевой длины считаются недействительными (совершенно законно построить недействительный период). Для этих периодов точка<last
>всегда будет на единицу меньше точки<begin
>.
#include "boost/date_time/local_time/local_time.hpp" //include all types plus i/o or #include "boost/date_time/local_time/local_time_types.hpp" //no i/o just types
Syntax | Description |
---|---|
Example | |
local_time_period(...) Parameters: local_date_time beginning local_date_time end |
Создайте период (начало, конец). Если конец = начало, то период будет определен как недействительный. |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time beg(ptime(date(2005,Jan,1),hours(0)), zone); local_date_time end(ptime(date(2005,Feb,1),hours(0)), zone); // period for the entire month of Jan 2005 local_time_period ltp(beg, end);> | |
local_time_period(...) Parameters: local_date_time beginning time_duration length |
Создайте период как [начало, начало+лин], где концом будет начало+лин. Если len = 0, то период будет определен как недействительный. |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time beg(ptime(date(2005,Jan,1),hours(0)), zone); // period for the whole day of 2005-Jan-01 local_time_period ltp(beg, hours(24));> | |
local_time_period(local_time_period rhs) |
Копировать конструктор |
<local_time_period ltp1(ltp);> |
Syntax | Description |
---|---|
Example | |
local_date_time begin() |
Возвращаем сначала local_date_time. |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time ldt((ptime(date(2005,Jan,1)),hours(0)), zone); local_time_period ltp(ldt, hours(2)); ltp.begin(); // => 2005-Jan-01 00:00:00> | |
local_date_time last() |
Возврат последнего локального_date_time в период |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time ldt((ptime(date(2005,Jan,1),hours(0))), zone); local_time_period ltp(ldt, hours(2)); ltp.last(); // => 2005-Jan-01 01:59:59.999999999> | |
local_date_time end() |
Возвращение за последний период |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time ldt((ptime(date(2005,Jan,1),hours(0))), zone); local_time_period ltp(ldt, hours(2)); ltp.end(); // => 2005-Jan-01 02:00:00> | |
time_duration length() |
Возвращает длительность периода локального времени. |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time ldt((ptime(date(2005,Jan,1),hours(0))), zone); local_time_period ltp(ldt, hours(2)); ltp.length(); // => 02:00:00> | |
bool is_null() |
Правда, если период плохо сформирован. Конец меньше или равен началу. |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time beg((ptime(date(2005,Feb,1),hours(0))), zone); local_date_time end((ptime(date(2005,Jan,1),hours(0))), zone); local_time_period ltp(beg, end); ltp.is_null(); // => true> | |
bool contains(local_date_time) |
Правда, если локальная дата - время находится в пределах периода. Периоды нулевой длины не могут содержать никаких точек. |
<time_zone_ptr zone(new posix_time_zone("MST-07")); local_date_time beg((ptime(date(2005,Jan,1),hours(0))), zone); local_date_time end((ptime(date(2005,Feb,1),hours(0))), zone); local_time_period jan_mst(beg, end); local_date_time ldt((ptime(date(2005,Jan,15),hours(12))), zone); jan_mst.contains(ldt); // => true local_time_period zero(beg, beg); zero.contains(beg); // false> | |
bool contains(local_time_period) |
Правда, если период находится в пределах периода |
<// using jan_mst period from previous example local_date_time beg((ptime(date(2005,Jan,7),hours(0))), zone); local_time_period ltp(beg, hours(24)); jan_mst.contains(ltp); // => true> | |
bool intersects(local_time_period) |
Правда, если периоды пересекаются |
<// using jan_mst period from previous example local_date_time beg((ptime(date(2005,Jan,7),hours(0))), zone); local_date_time end((ptime(date(2005,Feb,7),hours(0))), zone); local_time_period ltp(beg, end); jan_mst.intersects(ltp); // => true> | |
local_time_period intersection(local_time_period) |
Рассчитайте пересечение 2 периодов. Нуль, если нет пересечения. |
<// using jan_mst period from previous example local_date_time beg((ptime(date(2005,Jan,7),hours(0))), zone); local_date_time end((ptime(date(2005,Feb,7),hours(0))), zone); local_time_period ltp(beg, end); local_time_period res(jan_mst.intersection(ltp)); // res => 2005-Jan-07 00:00:00 through // 2005-Jan-31 23:59:59.999999999 (inclusive)> | |
local_time_period merge(local_time_period) |
Возвращает союз двух периодов. Нуль, если нет пересечения. |
<// using jan_mst period from previous example local_date_time beg((ptime(date(2005,Jan,7),hours(0))), zone); local_date_time end((ptime(date(2005,Feb,7),hours(0))), zone); local_time_period ltp(beg, end); local_time_period res(jan_mst.merge(ltp)); // res => 2005-Jan-07 00:00:00 through // 2005-Feb-06 23:59:59.999999999 (inclusive)> | |
local_time_period span(local_time_period) |
Сочетает два периода и любой разрыв между ними, такой, что начало = мин (p1.begin, p2.begin) и конец = макс (p1.end, p2.end). |
<// using jan_mst period from previous example local_date_time beg((ptime(date(2005,Mar,1),hours(0))), zone); local_date_time end((ptime(date(2005,Apr,1),hours(0))), zone); local_time_period mar_mst(beg, end); local_time_period res(jan_mst.span(mar_mst)); // res => 2005-Jan-01 00:00:00 through // 2005-Mar-31 23:59:59.999999999 (inclusive)> | |
void shift(time_duration) |
Добавьте продолжительность как к началу, так и к концу. |
<local_date_time beg((ptime(date(2005,Mar,1),hours(0))), zone); local_date_time end((ptime(date(2005,Apr,1),hours(0))), zone); local_time_period mar_mst(beg, end); mar_mst.shift(hours(48)); // mar_mst => 2005-Mar-03 00:00:00 through // 2005-Apr-02 23:59:59.999999999 (inclusive)> |
Syntax | Description |
---|---|
Example | |
operator==, operator!= |
Операторы равенства. Периоды равны, если ltp1.begin == ltp2.begin && ltp1.last == ltp2.last |
<if (ltp1 == ltp2) {...> | |
operator< |
Заказ без перекрытия. Правда, если ltp1.end() меньше ltp2.begin() |
<if (ltp1 < ltp2) {...> | |
operator> |
Заказ без перекрытия. Правда, если ltp1.begin() больше, чем ltp2.end() |
<if (ltp1 > ltp2) {... etc> | |
operator<=, operator>= |
Определены в терминах других операторов. |
#160; |
Статья Local Time раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 10. Boost.Date_Time может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 10. Boost.Date_Time ::
реклама |