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

Local Time

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

BoostC++ Libraries

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

PrevUpHomeNext

Local Time

Local Time System

Introduction -- Usage Examples

Introduction

Библиотека поддерживает 4 основных расширения для управления местным временем. Это включает

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

Usage Examples

Example Description
Простой часовой пояс Примеры использования часового пояса.custom_time_zoneиposix_time_zoneпоказаны.
Правила дневного света Простой пример, показывающий создание всех пятитипов dst_calc_rule.
Секунды с эпохи Пример, который вычисляет суммарные секунды, прошедшие с эпохи (1970-01 января), используя локальное время.

Time Zone (abstract)

Introduction -- Header -- Construction -- Accessors

Introduction

Класс Time_zone_base представляет собой абстрактный шаблон базового класса для представления часовых поясов. Часовые пояса представляют собой набор данных и правил, которые предоставляют информацию о часовом поясе. Библиотека date_time обрабатывает time_zones с помощью бустера::shared_ptr. Пользовательский класс часового пояса будет работать в библиотеке date_time с помощью этого shared_ptr.

Для удобства класс Time_zone_base типизирован как Time_zone. Все ссылки в документации на time_zone относятся к этому типдефу.

Header

Класс Time_zone_base определяется в заголовке:

#include "boost/date_time/time_zone_base.hpp"
    

Construction

Конструктор по умолчанию предоставляется в классе time_zone_base. В этом базовом классе нет частных членов данных для инициализации.

Параметрами шаблона являются time_type (обычно posix_time::ptime) и CharT (по умолчанию).

Accessors

Все перечисленные здесь аксессуары являются чисто виртуальными функциями.

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

Introduction -- Important Notes -- Header -- Construction -- Accessors

Introduction

Объект 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}

Исключения будут сделаны при следующих условиях:

  • Исключение будет сделано для недействительных спецификаций даты (см.класс даты).
  • Усиление::local_time::bad_offset исключено для:
  • Смещение начала или конца DST, отрицательное или более 24 часов.
  • Зона UTC больше +14 или меньше -12 часов.
  • Усиление::local_time::bad_adjustment (исключение для корректировки DST, которая составляет 24 часа или более)

Как указывалось выше, части строки "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. В качестве удобства предоставляется типдеф для повышения::shared_ptr:

typedef boost::shared_ptr<time_zone_base> local_time::time_zone_ptr;

См.Простой часовой поясдля параллельного примера использования time_zone и posix_time_zone.

Important Notes

  • Объекты posix_time_zone используют стандартные аббревиатуры экономии дневного света вместо полных имен (см.Аксессуарыниже).
  • Спецификации "Jn" и "n" не могут быть смешаны в строке спецификаций. Исполнитель: "FST+3FDT,59,J304"
  • «n» дата 59 означает 29 февраля. Не пытайтесь получить доступ в течение не високосного года или будет сделано исключение.

Header

Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.

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

Construction

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

Accessors

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

Time Zone Database

Introduction -- Header -- Construction -- Accessors -- Data File Details

Introduction

Система local_time зависит от возможности хранения информации о часовом поясе. Наша база данных часового пояса (tz_database) является средством постоянного хранения этих данных. Предусмотрены спецификации для многих часовых поясов (377 на данный момент). Эти спецификации основаны на данных, найденных в базе данныхZoneinfo. Спецификации хранятся в файле:

libs/date_time/data/date_time_zonespec.csv

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

Header

Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.

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

Construction

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

Accessors

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

Data File Details

Field Description/Details

Файл 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 является обязательным для зон, которые используют экономию дневного света (см. описание поля для более подробной информации).

Field Description/Details

  • ID

    Содержит идентифицирующую строку для Zone_spec. Любая струна будет работать, пока она уникальна. Нет двух одинаковых идентификаторов.

  • ДТП ABBR
  • Имя ЗППП
  • DST ABBR
  • Имя

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

  • GMT смещения

    Это количество часов, добавленных в utc, чтобы получить местное время до внесения каких-либо корректировок экономии дневного света. Примерами являются: Америка/Нью_Йорк офсет -5 часов, Африка/Кайро офсет +2 часа. Формат должен соответствовать формату продолжительности времени, описанному выше.

  • Корректировка DST

    Количество времени, добавленное к gmt_offset, когда экономия дневного света в силе. Формат должен соответствовать формату продолжительности времени, описанному выше.

    ПРИМЕЧАНИЕ: требуется больше возможностей правил - эта часть базы данных tz_data является неполной

  • ДСТ Правило даты начала

    Это специально отформатированная строка, описывающая день года, в который происходит переход. Он содержит три собственных поля, разделенных полуколонами.

    1. Первое поле обозначает «девятый» будний день месяца. Возможные значения: 1 (первый), 2 (второй), 3 (третий), 4 (четвертый), 5 (пятый) и -1 (последний).
    2. Второе поле указывает день недели от 0 до 6 (солнце = 0).
    3. Третье поле указывает месяц от 1-12 (Ян=1).

    Примеры: «-1;5;9» = «Последняя пятница сентября», «2;1;3» = «Второй понедельник марта»

  • Время начала

    Время начала — это количество часов, прошедших за полночь, в день стартового перехода происходит переход. Проще говоря, время суток перехода выполнено (в формате 24 часа). Формат должен соответствовать описанному выше формату длительности времени, за исключением того, что он всегда должен быть положительным.

  • ДСТ Правило даты окончания

    См. правило даты начала DST. Разница здесь заключается в том, что заканчивается экономия дневного света (переход на ЗППП).

  • Время окончания

    То же, что время начала.

Custom Time Zone

Introduction -- Header -- Construction -- Accessors -- Dependent Types

Introduction

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

В качестве удобства предоставляется типдеф для shared_ptr.

typedef boost::shared_ptr<dst_calc_rules> local_time::dst_calc_rule_ptr;

Объекты Time_zone используются через усилитель::shared_ptr. В качестве удобства предоставляется типдеф для повышения::shared_ptr:

typedef boost::shared_ptr<time_zone> local_time::time_zone_ptr;

Header

Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.

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

Construction

Конструкция пользовательской зоны времени зависит от четырех объектов: 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

Accessors

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

Dependent Types

Time Zone Names -- Dst Adjustment Offsets -- Daylight Savings Calc Rules

Time Zone Names

Тип 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

Тип 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));
>

Daylight Savings Calc Rules

Правила сбережений дневного света, называемые 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

Introduction -- Header -- Construct From Clock -- Construction -- Accessors -- Operators -- Struct tm Functions

Introduction

Объект local_date_time — точка во времени и соответствующий часовой пояс. Время представлено внутри как UTC.

Header

Включение одного заголовка приведет к увеличению всех типов::local_time, функций и операторов ввода-вывода.

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

Construct From Clock

Создание локального объекта времени с часов возможно либо со вторым, либо с субсекундным разрешением.

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

Construction

Конструкция объекта 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);
>

Accessors

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
>

Operators

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
>

Struct tm Functions

Предусмотрена функция преобразования объекта<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 */
>

Local Time Period

Introduction -- Header -- Construction -- Accessors -- Operators

Introduction

Класс<boost::local_time::local_time_period>обеспечивает прямое представление для диапазонов между двумя локальными временами. Периоды дают возможность упростить некоторые виды вычислений за счет упрощения условной логики программы.

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

Header

#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

Construction

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

Accessors

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

Operators

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;


PrevUpHomeNext

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




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



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


реклама


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

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