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

Date Time Input/Output

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

Date Time Input/Output

Date Time IO System

Исключение Обработка потоков

В версии 1.33 библиотека date_time использует новую потоковую систему ввода-вывода. Эта новая система дает пользователю отличный контроль над тем, как могут быть представлены даты и время. Варианты настройки можно разбить на две группы: флаги формата и элементы строки. Флаги формата обеспечивают гибкость в порядке элементов даты и типа. Настройка струнных элементов позволяет заменить встроенные в струны месячные имена, будние имена и другие струны, используемые в IO.

Выходная система основана на date_facet (производном от std::facet), в то время как входная система основана на date_input_facet (также полученном из std::facet). Фирмы времени и локального времени являются производными от этих базовых типов. Система вывода использует три объекта форматирования, в то время как система ввода использует четыре объекта парсера. Эти objetcs форматтера и парсера также настраиваются.

Важно отметить, что, хотя все примеры, показанные здесь, используют узкие потоки, доступны также широкие грани потока (см.Объекты ввода-выводадля полного списка).

Следует также отметить, что не все компиляторы способны использовать эту систему ввода-вывода. Для этих компиляторов все еще доступна система ввода-вывода, используемая в предыдущих версияхdate_time. Для этих компиляторов автоматически выбирается «унаследованный IO», однако унаследованная система IO может быть выбрана вручную путем определенияUSE_DATE_TIME_PRE_1_33_FACET_IO. Для получения дополнительной информации см.Build-Compiler Information.

Exception Handling on Streams

Когда ошибка возникает во время процесса потокового ввода,std::ios_base::failbitбудет (всегда) устанавливаться на поток. Также можно делать исключения при возникновении ошибки. Чтобы «включить» эти исключения, назовите функциюисключенийпотока с параметромstd::ios_base::failbit.

// "Turning on" exceptions
date d(not_a_date_time);
std::stringstream ss;
ss.exceptions(std::ios_base::failbit);
ss.str("204-Jan-01");
ss >> d; // throws bad_year exception AND sets failbit on stream
A simple example of this new system:
//example to customize output to be "LongWeekday LongMonthname day, year"
//                                  "%A %b %d, %Y"
date d(2005,Jun,25);
date_facet* facet(new date_facet("%A %B %d, %Y"));
std::cout.imbue(std::locale(std::cout.getloc(), facet));
std::cout << d << std::endl;
// "Saturday June 25, 2005"

Format Flags

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

В следующих таблицах перечислены все флаги, доступные для ввода-вывода date_time, а также strftime. Флаги формата, отмеченные одной звездочкой (*), имеют поведение, уникальное для date_time. Эти флаги, отмеченные восклицательным знаком (!), не могут использоваться для ввода (в настоящее время). Флаги, помеченные знаком хеширования (#), реализуются локальной системой и, как известно, отсутствуют на некоторых платформах. Первая таблица относится к датам, а вторая таблица — к временам.

Date Facet Format Flags

Format Specifier Description
Example
%a
Сокращенное название дня недели
«Мон» =>Понедельник
%A
Длинный день недели
«Понедельник»
%b
Сокращенное название дня недели
«Февраль» =>Февраль
%B
Полное имя месяца
«Февраль»
%c !
Предпочтительное представление даты и времени для текущего местоположения.
%C !#
Число века (год/100) как 2-значное целое число.
%d
День месяца как десятичный от 01 до 31
%D !#
эквивалентно %m/%d/%y
%e #
Как и %, день месяца как десятичное число, но ведущий ноль заменяется пространством.
%G !
Это имеет тот же формат и значение, что и %y, за исключением того, что если номер недели ISO принадлежит предыдущему или следующему году, этот год используется вместо этого.
%g !
Как %G, но без века.
%h !#
эквивалентно %b
%j
День года как десятичный от 001 до 366 високосных лет, 001 - 365 високосных лет.
«060» =>29 февраля
%m
Название месяца как десятичная цифра 01-12
«01» =>январь
%u !
День недели как десятичный, диапазон от 1 до 7, понедельник 1.
%U
Число недели текущего года как десятичное число, колеблется от 00 до 53, начиная с первого воскресенья как первого дня недели 01. В 2005 году 1 января приходится на субботу, поэтому она приходится на неделю 00 2005 года (неделя 00 охватывает 2004-26 декабря - 2005-01 января). Это произошло на 53-й неделе 2004 года.
дата d(2005, январь, 1); // Суббота // с форматом %U ss<
%V !#
ISO 8601:1988 номер недели текущего года как десятичное число, диапазон от 01 до 53, где неделя 1 - первая неделя, которая имеет по крайней мере 4 дня в текущем году, и с понедельником как первый день недели.
%w
День недели как десятичное число от 0 до 6
«0» =>Воскресенье
%W
Номер недели от 00 до 53, где понедельник - первый день недели 1
дата d(2005, январь, 2); // воскресенье // с форматом %W ss<
%x
Внедрение определенного формата даты из локализации.
date d(2005,Oct,31); date_facet* f = new date_facet("%x"); locale loc = locale(locale("en_US"), f); cout.imbue(loc); cout<
%y
Двухзначный год
"05" =>2005
%Y
Четырехзначный год
"2005"
%Y-%b-%d
Формат даты по умолчанию
"2005-Апрель-01"
%Y%m%d
Формат ISO
"20050401"
%Y-%m-%d
Расширенный формат ISO
"2005-04-01"

Флаги формата Time Facet

Format Specifier Description
Example
%- *!
Для обозначения длительности. Отображается только тогда, когда продолжительность отрицательная.
"-13:15:16"
%+ *!
Для обозначения длительности. Всегда показывает как положительные, так и отрицательные.
"+13:15:16"
%f
Фракционные секунды используются всегда, даже если их значение равно нулю.
"13:15:16.000000"
%F *
Фракционные секунды используются только тогда, когда их значение не равно нулю.
"13:15:16" "05:04:03.001234"
%H
Час как десятичное число с использованием 24-часовых часов (диапазон от 00 до 23).
#160;
%I !
Час как десятичное число с использованием 12-часовых часов (диапазон от 01 до 12).
#160;
%k !
Час (24-часовые часы) как десятичное число (диапазон от 0 до 23); однозначным цифрам предшествует пустой.
#160;
%l !
Час (12 часов) как десятичное число (диапазон от 1 до 12); однозначным цифрам предшествует пустой.
#160;
%M
Минута как десятичное число (диапазон от 00 до 59).
#160;
%O
Число часов во временной продолжительности как десятичное число (диапазон от 0 до max. представимая продолжительность); однозначным цифрам предшествует ноль.
#160;
%p !
Либо "AM", либо "PM" в соответствии с заданным временным значением, либо соответствующие строки для текущего местоположения.
#160;
%P !#
Как %p, но в нижнем регистре: «am» или «pm» или соответствующая строка для текущего местоположения.
#160;
%r !#
Время в a.m. или p.m. В местоположении POSIX это эквивалентно '%I:%M:%S%p "
#160;
%R !
Время в 24-часовой записи (%H:%M)
#160;
%s *
Секунды с дробными секундами.
"59.000000"
%S
Только секунды
"59"
%T !
Время в 24-часовой записи (%H:%M:%S)
#160;
%q
часовой пояс ISO (только выход). Этот флаг игнорируется при использовании time_facet с ptime.
"-0700" // Горное стандартное время
%Q
Расширенный часовой пояс ISO (только выход). Этот флаг игнорируется при использовании time_facet с ptime.
"-05:00" // Восточное стандартное время
%z *!
Сокращенный часовой пояс (только выход). Этот флаг игнорируется при использовании time_facet с ptime.
«MST» // Горное стандартное время
%Z *!
Полное название часового пояса (только выход). Этот флаг игнорируется при использовании time_facet с ptime.
«ЭДТ» // Восточное светлое время
%ZP *
строка часового пояса Posix (доступна как для ввода, так и для вывода). Этот флаг игнорируется при использовании time_facet с ptime. Полную информацию о строках часового пояса posix см. вposix_time_zone class.
"EST-05EDT+01,M4.1.0/02:00,M10.5.0/02:00"
%x %X
Внедрение определенного формата даты/времени из локализации.
Дата d(2005,Oct,31); ptime pt(d, hours(20)); time_facet* f = new time_facet("%x%X"); locale loc = locale("en_US"), f); cout.imbue(loc); cout<< pt. "10/31/2005 08:00:00 PM" loc = locale(locale("de_DE"), f); cout.imbue(loc); cout<< pt; // "31.10.2005 20:00:00"
%Y%m%dT%H%M%S%F%q
Формат ISO
"20051015T131211-0700" // 15 октября 2005 13:12:11 MST
%Y-%m-%d %H:%M:%S%F%Q
Расширенный формат ISO
"2005-10-15 13:12:11-07:00"
%Y-%b-%d %H:%M:%S%F %z
Формат по умолчанию используется при выводе ptime и local_date_time.
«2005-Окт-15 13:12:11 MST»
%Y-%b-%d %H:%M:%S%F %ZP
Формат по умолчанию используется при вводе ptime и local_date_time.
«2005-Окт-15 13:12:11 MST-07»
%-%H:%M:%S%F !
Формат Default time_duration для вывода. Знак будет отображаться только в течение отрицательных периодов.
"-13:14:15.003400"
%H:%M:%S%F
Формат по умолчанию time_duration для ввода.
«13:14:15.003400»

* Флаги с уникальным поведениемdate_time.

# Флаги, которые имеют зависимое от платформы поведение. Их не везде можно поддержать.

! Флаги, которые в настоящее время не работают для ввода.

В следующей таблице перечислены имеющиеся аспекты.

IO Objects

* Эти ссылки приводят к разделам ссылкиtime_facetиtime_input_facet. Это не реальные классы, а типизированные.

Formatter/Parser Objects

Для реализации новых граней i/o библиотека даты-времени использует ряд новых парсеров и форматировщиков. Эти классы доступны для пользователей, которые хотят реализовать специализированные процедуры ввода / вывода.

Date Facet

Introduction - Construction - Accessors

Introduction

Повышение::date_time::date_facetпозволяет пользователям иметь значительный контроль над потоковой передачей дат на выходе (и других григорианских объектов). Дата_facet типизирована вгригорианскомпространстве имен какдата_facetиwdate_facet.

Construction

Syntax Description
date_facet()
Разработчик Default
date_facet(...)
  Parameters:
    char_type* format
    input_collection_type
Данный формат будет использоваться для вывода даты. Все остальные форматы будут использовать свои дефолты. Коллекция - это набор коротких имен, которые будут использоваться в течение нескольких месяцев. Все другие коллекции имен будут использовать свои дефолты.
date_facet(...)
  Parameters:
    char_type* format
    period_formatter_type
    special_values_formatter_type
    date_gen_formatter_type
Данный формат будет использоваться для вывода даты. Остальные параметры — это форматирующие объекты. Более подробную информацию об этих объектах можно найти здесь. Этот конструктор также предоставляет аргументы по умолчанию для всех параметров, кроме формата. Поэтомуdate_facet("%m %d %Y")будет работать.

Accessors

Syntax Description
Example
void format(char_type*)
Установите формат для дат.
date_facet* f = new date_facet(); f->format("%m %d %Y");
void set_iso_format()
Устанавливает формат даты для ISO
f->set_iso_format(); // "%Y%m%d"
void set_iso_extended_format()
Устанавливает формат даты ISO Extended
f->set_iso_extended_format(); // "%Y-%m-%d"
void month_format(char_type*)
Установите формат на месяцы, когда они «устанавливаются» индивидуально.
f->month_format("%B"); ss<< greg_month(12); // "Декабрь"
void weekday_format(char_type*)
Установите формат для будней, когда они «устанавливаются» индивидуально.
f->weekday_format("%a"); ss<< greg_weekday(2); // "Tue"
void period_formatter(...)
  Parameter:
    period_formatter_type
Заменяет объект форматировщика периода созданным пользователем.
См.учебникдля полного примера.
void special_values_formatter(...)
  Parameter:
    special_values_formatter_type
Заменяет объект форматирования special_values созданным пользователем.
См.учебникдля полного примера.
void date_gen_phrase_strings(...)
  Parameters:
    input_collection_type
    date_gen_formatter_type::
      phrase_elements
Устанавливает новые строки фраз генератора дат в файле date_gen_formatter. Сбор данных представляет собой вектор строк (подробнее об этих строках см.документация форматировщика/парсера генератора дат). Параметр фразы_элементов — это число, определенное в объекте date_generator_formatter, которое имеет значение по умолчанию «первый». Используется для указания, каким будет положение первой строки в сборнике.
void short_weekday_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «поставке» коротких будней.
См.учебникдля полного примера.
void long_weekday_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «поставке» длинных будней.
См.учебникдля полного примера.
void short_month_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «выделении» коротких месяцев.
См.учебникдля полного примера.
void long_month_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «вытягивании» длинных месяцев.
См.учебникдля полного примера.
OutItrT put(...)
  Common parameters for all 
  'put' functions:
    OutItrT 
    ios_base
    char_type
  Unique parameter for 'put' funcs:
    gregorian object
В файле date_facet 12 функций. Общими параэтерами являются: итератор, указывающий на следующий элемент в потоке, объект ios_base и персонаж заполнения. Каждый уникальный григорианский объект имеет свою собственную функцию. Каждая уникальная функция позиционирования описана ниже.
OutItrT put(..., date)
Помещает объект даты в поток, используя формат, установленный форматомили по умолчанию.
OutItrT put(..., days)
Помещает объект дня в поток в виде числа.
OutItrT put(..., month)
Помещает объект месяца в поток, используя формат, установленныйmonth_format(...)или по умолчанию.
OutItrT put(..., day)
Помещает объект дня месяца в поток в виде двухзначного числа.
«01» // 1 января
OutItrT put(..., day_of_week)
Помещает объект дня недели в поток с использованием формата, установленногоweekday_format(...)или по умолчанию.
OutItrT put(..., date_period)
Помещает дату_период в поток. Формат дат будет использовать формат, установленный форматом.или формат даты по умолчанию. Тип периода (открытый или закрытый диапазон) и используемые разграничители - это те, которые используются форматом period_formatter.
OutItrT put(..., partial_date)
Помещает в поток объект part_date date_generator. Используемый формат месяца устанавливаетсяmonth_format(..)или по умолчанию. День месяца представлен в виде двухзначного числа.
"01 Ян" // форматы по умолчанию "01 Январь" // формат длинного месяца
OutItrT put(..., date_generator)
  Date Generator Type:
    nth_day_of_the_week_in_month
Выберите nth_day_of_the_week_in_month объект в потоке. Формат месяца устанавливаетсяmonth_format(...)или по умолчанию. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_formatter.
«третий фри в мае» // дефолты
OutItrT put(..., date_generator)
  Date Generator Type:
    first_day_of_the_week_in_month
Помещает первый_day_of_the_week_in_month объект в поток. Формат месяца устанавливаетсяmonth_format(...)или по умолчанию. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_formatter.
«Свадьба первого июня» // дефолты
OutItrT put(..., date_generator)
  Date Generator Type:
    last_day_of_the_week_in_month
Помещает в поток объект Last_day_of_the_week_in_month. Формат месяца устанавливаетсяmonth_format(...)или по умолчанию. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_formatter.
«Последний Тю Мар» // дефолты
OutItrT put(..., date_generator)
  Date Generator Type:
    first_day_of_the_week_after
Помещает первый_day_of_the_week_after объект в поток. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_formatter.
«Первый Сат после» // дефолты
OutItrT put(..., date_generator)
  Date Generator Type:
    first_day_of_the_week_before
Помещает первый_день_недели_до объекта в поток. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_formatter.
«первый месяц до» // дефолты

Date Input Facet

Introduction - Construction - Accessors

Introduction

Повышение::date_time:::date_input_facetпозволяет пользователям иметь значительный контроль над тем, как даты (и другие грегорианские объекты) передаются в потоковом режиме. Дата_input_facet типизирована вгригорианскомпространстве имен какдата_input_facetиwdate_input_facet.

Construction

Syntax Description
date_input_facet()
Разработчик Default
date_input_facet(string_type format)
Формат будет использоваться для ввода даты. Все остальные форматы будут использовать свои дефолты.
date_input_facet(...)
  Parameters:
    string_type format
    format_date_parser_type
    special_values_parser_type
    period_parser_type
    date_gen_parser_type
Формат будет использоваться для ввода даты. Остальные параметры — парсерные объекты. Более подробную информацию об этих объектах можно найти здесь.

Accessors

Syntax Description
Example
void format(char_type*)
Установите формат для дат.
date_input_facet* f = new date_input_facet(); f->format("%m %d %Y");
void set_iso_format()
Устанавливает формат даты для ISO
f->set_iso_format(); // "%Y%m%d"
void set_iso_extended_format()
Устанавливает формат даты ISO Extended
f->set_iso_extended_format(); // "%Y-%m-%d"
void month_format(char_type*)
Установите формат при «получении» месяцев по отдельности.
f->month_format("%B"); ss.str("March"); ss>>m; // March
void weekday_format(char_type*)
Установите формат, когда «получаете» будни индивидуально.
f->weekday_format("%a"); ss.str("Sun"); ss>>wd; // Sunday
void year_format(char_type*)
Установите формат, когда «получите» годы по отдельности.
f->weekday_format("%y"); ss.str("04"); ss>>год; // 2004
void period_parser(...)
  Parameter:
    period_parser_type
Заменяет объект парсера периода созданным пользователем.
См.учебникдля полного примера.
void special_values_parser(...)
  Parameter:
    special_values_parser_type
Заменяет объект парсера special_values созданным пользователем.
См.учебникдля полного примера.
void date_gen_phrase_strings(...)
  Parameters:
    input_collection_type
Устанавливает новые строки фраз генератора дат в date_gen_parser. Сбор данных представляет собой вектор строк (подробнее об этих строках см.документация форматировщика/парсера генератора дат).
void short_weekday_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «получении» коротких будней.
См.учебникдля полного примера.
void long_weekday_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «получении» длинных будней.
См.учебникдля полного примера.
void short_month_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «получении» коротких месяцев.
См.учебникдля полного примера.
void long_month_names(...)
  Parameter:
    input_collection_type
Замените строки, используемые при «получении» длинных месяцев.
См.учебникдля полного примера.
InItrT get(...)
  Common parameters for all 
  'get' functions:
    InItrT from
    InItrT to
    ios_base
  Unique parameter for 'get' funcs:
    gregorian object
В файле date_input_facet 13 функций get. Общими параметрами являются: итератор, указывающий на начало потока, итератор, указывающий на конец потока, и объект ios_base. Каждый уникальный григорианский объект имеет свою собственную функцию. Каждая уникальная функция получения описана ниже.
InItrT get(..., date)
Получает объект даты из потока, используя формат, установленный форматомили по умолчанию.
ss.str("2005-Jan-01"); ss>>d; // формат по умолчанию
InItrT get(..., month)
Получает объект месяца из потока с помощью формата, установленногоmonth_format(...)или по умолчанию.
ss.str("Feb"); ss>>m; // формат по умолчанию
InItrT get(..., day_of_week)
Получает объект дня недели из потока с помощью формата, установленногоweekday_format(...)или по умолчанию.
ss.str("Sun"); ss>>dow; // формат по умолчанию
InItrT get(..., day)
Получает объект дня месяца из потока в виде двухзначного числа.
«01» // 1 января
InItrT get(..., year)
Получает годичный объект из потока в виде числа. Количество ожидаемых цифр зависит от формата года.
ss/str("2005"); ss>>y; // формат по умолчанию
InItrT get(..., days)
Получает объект дня из потока в виде числа.
ss.str("356"); ss >>dys; // полный год
InItrT get(..., date_period)
Получает дату_период из потока. Формат дат будет использовать формат, установленный форматом[..]или форматом даты по умолчанию. Тип периода (открытый или закрытый диапазон) и используемые разграничители - это те, которые используются периодом.
См.учебникдля полного примера.
InItrT get(..., partial_date)
Получает из потока объект part_date date_generator. Используемый формат месяца устанавливаетсяmonth_format(..)или по умолчанию. День месяца представлен в виде двухзначного числа.
"01 Ян" // форматы по умолчанию "01 Январь" // формат длинного месяца
InItrT get(..., date_generator)
  Date Generator Type:
    nth_day_of_the_week_in_month
Получить nth_day_of_the_week_in_month Объект из потока. Формат месяца устанавливаетсяmonth_format(...)или по умолчанию. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_parser.
«третий фри в мае» // дефолты
InItrT get(..., date_generator)
  Date Generator Type:
    first_day_of_the_week_in_month
Получает первый_day_of_the_week_in_month объект из потока. Формат месяца устанавливаетсяmonth_format(...)или по умолчанию. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_parser.
«Свадьба первого июня» // дефолты
InItrT get(..., date_generator)
  Date Generator Type:
    last_day_of_the_week_in_month
Получает из потока объект Last_day_of_the_week_in_month. Формат месяца устанавливаетсяmonth_format(...)или по умолчанию. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_parser.
«Последний Тю Мар» // дефолты
InItrT get(..., date_generator)
  Date Generator Type:
    first_day_of_the_week_after
Получает первый _day_of_the_week_after объект из потока. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_parser.
«Первый Сат после» // дефолты
InItrT get(..., date_generator)
  Date Generator Type:
    first_day_of_the_week_before
Получает первый_day_of_the_week_before объект из потока. Формат будня устанавливаетсяweekday_format(...)или по умолчанию. Остальные элементы фразы установлены вdate_generator_parser.
«первый месяц до» // дефолты

Time Facet

Introduction - Construction - Accessors

Introduction

boost::date_time::time_facetявляется расширениемboost::date_time::date_facet. Time_facet типизирован в пространстве именposix_timeкакtime_facetиwtime_facet. Он типизирован в пространстве именlocal_timeкакlocal_time_facetиwlocal_time_facet.

Construction

Syntax Description
time_facet()
Разработчик Default
time_facet(...)
  Parameters:
    char_type* format
    period_formatter_type
    special_values_formatter_type
    date_gen_formatter_type
Формат будет использоваться для вывода времени. Остальные параметры — это форматирующие объекты. Более подробную информацию об этих объектах можно найти здесь. Этот конструктор также предоставляет аргументы по умолчанию для всех параметров, кроме формата. Поэтомуtime_facet("%H:%M:S %m %d %Y")будет работать.

Accessors

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

Syntax Description
Example
void time_duration_format(...)
  Parameter:
    char_type*
Установите формат time_duration. Формат time_duration имеет возможность отображать знак длительности. Флаг«% +»всегда будет отображать знак.'%-'будет отображаться только в том случае, если знак отрицательный. В настоящее время символы «-» и «+» используются для обозначения знака.
f->time_duration_format("%+%H:%M"); // только часы и минуты w/знак всегда отображал time_duration td1(3, 15, 56); time_duration td2(-12, 25, 32); ss<< td1; // "+03:15:56" ss<< td2; // "-12:25:56"
void set_iso_format()
Устанавливает формат даты и времени для ISO.
f->set_iso_format(); // "%Y%m%dT%H%M%S%F%q"
void set_iso_extended_format()
Устанавливает формат даты и времени для расширения ISO
f->set_iso_extended_format(); // «%Y-%m-%d %H:%M:%S%F%Q»
OutItrT put(...)
  Common parameters for all 
  'put' functions:
    OutItrT 
    ios_base
    char_type
  Unique parameter for 'put' funcs:
    posix_time object
В Time_facet есть 3 функции. Общие параметры: итератор, указывающий на следующий элемент в потоке, объект ios_base и символ заполнения. Каждый уникальный объект posix_time имеет свою собственную функцию. Каждая уникальная функция позиционирования описана ниже.
OutItrT put(..., ptime)
Помещает объект ptime в поток, используя формат, установленный форматомили по умолчанию.
OutItrT put(..., time_duration)
Помещает объект time_duration в поток, используя формат, установленныйtime_duration_format(...)или по умолчанию.
OutItrT put(..., time_period)
Введите временной период в поток. Формат дат и времени будет использовать формат, установленный форматомили форматом даты / времени по умолчанию. Тип периода (открытый или закрытый диапазон) и используемые разграничители используются форматом period_formatter.

Time Input Facet

Introduction - Construction - Accessors

Introduction

boost::date_time::time_input_facetявляется расширениемdate_input_facet. Он типизирован в бустере::posix_timenamespace какtime_input_facetиwtime_input_facet. Он типизирован в бустере::local_timenamespace какlocal_time_input_facetиwlocal_time_input_facet.

Construction

Syntax Description
time_input_facet()
Разработчик Default
time_input_facet(string_type)
Формат будет использоваться для ввода даты/времени. Все остальные форматы будут использовать свои дефолты.
time_input_facet(...)
  Parameters:
    string_type format
    format_date_parser_type
    special_values_parser_type
    period_parser_type
    date_gen_parser_type
Формат будет использоваться для ввода даты/времени. Остальные параметры — парсерные объекты. Более подробную информацию об этих объектах можно найти здесь.

Accessors

Time_input_facet наследует все общедоступные методы date_input_facet. Поэтому методы date_input_facet здесь не перечислены. Вместо этого их можно найти по ссылке.

Syntax Description
Example
void set_iso_format()
Устанавливает формат времени для ISO
f->set_iso_format(); // "%Y%m%dT%H%M%S%F%q" "20051225T132536.789-0700"
void set_iso_extended_format()
Устанавливает формат даты ISO Extended
f>set_iso_extended_format(); // "%Y-%m-%d" %H:%M:%S%F %Q» «2005-12-25 13:25:36.789 -07:00»
void time_duration_format(...)
  Parameter:
    char_type*
Установите формат time_duration.
f->time_duration_format("%H:%M"); // только часы и минуты
InItrT get(...)
  Common parameters for all 
  'get' functions:
    InItrT from
    InItrT to
    ios_base
  Unique parameter for 'get' funcs:
    gregorian object
Есть 3 функции получения в time_input_facet. Общими параметрами являются: итератор, указывающий на начало потока, итератор, указывающий на конец потока, и объект ios_base. Каждый уникальный григорианский объект имеет свою собственную функцию. Каждая уникальная функция получения описана ниже.
InItrT get(..., ptime)
Получает объект ptime из потока, используя формат, установленный форматомили по умолчанию.
ss.str("2005-Jan-01 13:12:01"); ss >>pt; // формат по умолчанию
InItrT get(..., time_duration)
Получает объект time_duration из потока, используя формат, заданныйtime_duration_format(...)или по умолчанию.
ss.str("01:25:15.000123000"); ss>>td; // формат по умолчанию
InItrT get(..., time_period)
Получает временной период из потока. Формат дат/времен будет использовать формат, установленный форматомили форматом даты и времени по умолчанию. Тип периода (открытый или закрытый диапазон) и используемые разграничители - это те, которые используются периодом.
См.учебникдля полного примера.

Date Time Formatter/Parser Objects

Date Time Formatter/Parser Objects

Periods | Date Generators | Special Values | Format Date Parser

Periods

Period_formatter и period_parser обеспечивают единый интерфейс для ввода и вывода date_periods, time_periods и в будущем выпуске local_date_time_periods. Пользователь имеет контроль над разграничителями, форматами компонентов даты/времени и формой периода. Формат компонентов даты/времени контролируется через элементы ввода и вывода даты_времени.

Period Form

Периоды строятся с открытыми параметрами. Первое значение является отправной точкой и включается в период. Конечное значение не включается, но сразу следует за последним значением: [начало/конец]. Тем не менее, период можно транслировать как открытый диапазон или закрытый диапазон.

[2003-Jan-01/2003-Dec-31] <-- period holding 365 days
[2003-Jan-01/2004-Jan-01) <-- period holding 365 days
Delimiters

Есть четыре разграничителя. Значения по умолчанию являются

"\" - разделитель
"[] - стартовый делимитер
") - конечный разграничитель открытого диапазона
"] - конечный делимитер замкнутого диапазона

Пользователь может предоставить пользовательский набор разграничителей. Пользовательские разграничители могут содержать пробелы.

Customization

Форма периода и разграничители могут быть установлены в качестве параметров конструкции или с помощью функций аксессуара. Пользовательский парсер / формататор периода может затем использоваться в качестве параметра конструкции для нового аспекта или может быть установлен в существующем аспекте с помощью функции доступа.

Period Formatter/Parser Reference
The complete class reference can be found here: Period Formatter Doxygen Reference and here: Period Parser Doxygen Reference

Period Formatter Construction

Syntax Description
period_formatter(...)
  Parameters:
    range_display_options
    char_type*
    char_type*
    char_type*
    char_type*
Все пять параметров конструкции имеют значения по умолчанию, поэтому этот конструктор также удваивается как конструктор по умолчанию.range_display_optionsявляется публичным номером типаperiod_formatterкласса. Возможные варианты: AS_ OPEN_RANGE или AS_ Закрытый гнев. Закрытый диапазон — это по умолчанию. Период имеет три важных момента: начало, последний и конец. Закрытый период диапазона принимает форму [начало, конец], где период открытого диапазона принимает форму [начало, конец]. Четыре параметра char_type*: разделитель периода, начальный делимитер, конечный делимитер открытого диапазона и конечный делимитер закрытого диапазона.

Period Formatter Accessors

Syntax Description
Example
range_display_options range_option()
Возвращает текущую настройку для дисплея диапазона (либо AS_OPEN_RANGE, либо AS_CLOSED_RANGE).
void range_option(...)
  Parameter:
    range_display_options
Устанавливает опцию отображения диапазона (либо AS_OPEN_RANGE, либо AS_CLOSED_RANGE).
void delimiter_strings(...)
  Parameters:
    string_type
    string_type
    string_type
    string_type
Установите новые строки разграничителя в форматировщике.
строка beg("->|"); строка sep(" | |"); строка opn(" ->|"); строка clo(" |<-"); pf.delimiter_strings(beg, sep, opn, clo);
put_period_start_delimeter(...)
  Return Type:
    OutItrT
  Parameter:
    OutItrT
Помещает стартовый разграничитель в поток в положении, указанном параметром OutItrT.
put_period_sepatator(...)
  Return Type:
    OutItrT
  Parameter:
    OutItrT
Помещает разделитель в поток в положении, указанном параметром OutItrT.
put_period_end_delimeter(...)
  Return Type:
    OutItrT
  Parameter:
    OutItrT
Помещает конечный разграничитель в поток в положении, указанном параметром OutItrT.
OutItrT put_period(...)
  Parameters:
    OutItrT
    ios_base
    char_type
    period_type
    facet_type
Помещает период в поток, используя заданные значения для делимитера, разделителя и дисплея диапазона. Параметр граней используется для постановки даты (или времени) объектов периода.

Period Parser Construction

Syntax Description
period_parser(...)
  Parameters:
    period_range_option
    char_type*
    char_type*
    char_type*
    char_type*
Все пять параметров конструкции имеют значения по умолчанию, поэтому этот конструктор также удваивается как конструктор по умолчанию.period_range_optionявляется публичным номером классаperiod_parser. Возможные варианты: AS_ OPEN_RANGE или AS_ Закрытый гнев. Закрытый диапазон — это по умолчанию. Период имеет три важных момента: начало, последний и конец. Закрытый период диапазона принимает форму [начало, конец], где период открытого диапазона принимает форму [начало, конец]. Четыре параметра char_type*: разделитель периода, начальный делимитер, конечный делимитер открытого диапазона и конечный делимитер закрытого диапазона.
period_parser(period_parser)
Копировать конструктор

Period Parser Accessors

Syntax Description
Example
period_range_option range_option()
Возвращает текущую настройку для дисплея диапазона (либо AS_OPEN_RANGE, либо AS_CLOSED_RANGE).
void range_option(...)
  Parameter:
    period_range_option 
Устанавливает опцию для диапазона периодов (AS_OPEN_RANGE или AS_CLOSED_RANGE).
void delimiter_strings(...)
  Parameters:
    string_type
    string_type
    string_type
    string_type
Установите новые струны делимитера в парсере.
строка beg("->|"); строка sep(" | |"); строка opn(" ->|"); строка clo(" |<-"); pp.delimiter_strings(beg, sep, opn, clo);
collection_type delimiter_strings()
Возвращает текущую настройку для дисплея диапазона (либо AS_OPEN_RANGE, либо AS_CLOSED_RANGE).
period_type get_period(...)
  Parameters:
    stream_itr_type
    stream_itr_type
    ios_base
    period_type
    duration_type
    facet_type
Парсирует период из потока. Параметры итератора указывают на начало и конец потока. Продолжительность_тип имеет отношение к типу периода, например: Adate_periodбудет использоватьднейв качестве продолжительности_типа. Период будет анализироваться в соответствии с форматами и строками, найденными в параметре грани.

________________________________________

Date Generators

Формататор и парсер date_generator обеспечивают гибкость, позволяя пользователю использовать пользовательские «элементы фразы». Эти элементы фразы являются промежуточными словами в генераторах дат. Например, в date_generator "Второй понедельник марта", "Второй" и "Второй" - элементы фразы, где "Понедельник" и "Март" - элементы даты. Настройка элементов даты производится с гранью. Порядок даты и элементы фразы изменить нельзя. При разборе все элементы фразы date_generator должны быть правильно разобраны или ios_base:

Customization

По умолчанию «phrase_strings»:

"Первый" "второй" "третий" "четвертый" "пятый" "последний" "до" "после" "о"

Пользовательский набор фраз_струн должен поддерживать этот порядок возникновения (Ex: «1-я», «2-я», «3-я», «4-я», «5-я», «последняя», «предыдущая», «прошлая», «в»).

Примеры использования фразы по умолчанию_strings и форматов по умолчанию для будни и месяца:

"first Tue of Mar"

И используя пользовательскую фразу_строк:

"1st Tue in Mar"

Настраиваемый набор элементов фразы может быть установлен в качестве параметров конструкции или через функцию доступа. Пользовательский парсер/форматер date_generator может быть использован в качестве конструктивного параметра для нового аспекта или может быть установлен в существующем аспекте с помощью функции доступа.

ВАЖНОЕ ПРИМЕЧАНИЕ: До 1.33, неполная дата была выведена как «1 Ян» с одним * или * двузначным числом для дня. Новое поведение заключается в том, чтобы *всегда* помещать двузначное число на день - "01 января".

Date Generator Reference
The complete class references can be found here: Date Generator Formatter Doxygen Reference and here: Date Generator Parser Doxygen Reference

Date Generator Formatter Construction

Syntax Description
date_generator_formatter()
Использует элементы генератора дат по умолчанию.
date_generator_formatter(...)
  Parameters:
    string_type first_element
    string_type second_element
    string_type third_element
    string_type fourth_element
    string_type fifth_element
    string_type last_element
    string_type before_element
    string_type after_element
    string_type of_element
Конструирует формат date_generator_formatter с использованием заданных строк элементов.

Date Generator Formatter Accessors

Syntax Description
Example
void elements(...)
  Parameters:
    collection_type
    phrase_elements
Замените существующие элементы фразы набором новых. Параметрphrase_elements— это число, которое указывает, что является первым элементом в новой коллекции (по умолчанию).
// col представляет собой коллекционный холдинг // «финал», «приор», «следующий», // и «в» typedef date_generator_formatter dgf; dgf formatter(); formatter.elements(col, dgf::last); // полными элементами в dgf являются теперь: «первый», «второй», «третий», «четвертый», «пятый», «финал», «приор», «следующий» и «в»
put_partial_date(...)
  Return Type:
    facet_type::OutItrT
  Parameters:
    OutItrT next
    ios_base
    char_type fill
    partial_date
    facet_type
Функция Put для Partial_date. Это шаблонная функция, которая принимает вид facet_type в качестве параметра.
Выберите «Partial_date =>dd Month».
put_nth_kday(...)
  Return Type:
    facet_type::OutItrT
  Parameters:
    OutItrT next
    ios_base
    char_type fill
    nth_kday_type
    facet_type
Функция позиционирования nth_kday_type. Это шаблонная функция, которая принимает вид facet_type в качестве параметра.
Поместите nth_day_of_the_week_in_month =>"nth weekday of month".
put_first_kday(...)
  Return Type:
    facet_type::OutItrT
  Parameters:
    OutItrT next
    ios_base
    char_type fill
    first_kday_type
    facet_type
Функция Put для первого_kday_type. Это шаблонная функция, которая принимает вид facet_type в качестве параметра.
Выберите «первый день месяца» (first weekday of the week in month).
put_last_kday(...)
  Return Type:
    facet_type::OutItrT
  Parameters:
    OutItrT next
    ios_base
    char_type fill
    last_kday_type
    facet_type
Функция put для Last_kday_type. Это шаблонная функция, которая принимает вид facet_type в качестве параметра.
Поставить last_day_of_the_week_in_month =>"последний будний день месяца".
put_kday_before(...)
  Return Type:
    facet_type::OutItrT
  Parameters:
    OutItrT next
    ios_base
    char_type fill
    kday_before_type
    facet_type
Функция put для kday_before_type. Это шаблонная функция, которая принимает вид facet_type в качестве параметра.
Положите первый_day_of_the_week_before =>"за день до"
put_kday_after(...)
  Return Type:
    facet_type::OutItrT
  Parameters:
    OutItrT next
    ios_base
    char_type fill
    kday_after_type
    facet_type
Функция put для kday_after_type. Это шаблонная функция, которая принимает вид facet_type в качестве параметра.
Выберите «первый день_of_the_week_after» =>

Date Generator Parser Construction

Syntax Description
date_generator_parser()
Использует элементы генератора дат по умолчанию.
date_generator_parser(...)
  Parameter:
    date_generator_parser
Копировать конструктор
date_generator_parser(...)
  Parameters:
    string_type first_element
    string_type second_element
    string_type third_element
    string_type fourth_element
    string_type fifth_element
    string_type last_element
    string_type before_element
    string_type after_element
    string_type of_element
Конструирует date_generator_parser с использованием заданных строк элементов.

Date Generator Parser Accessors

Syntax Description
Example
void element_strings(...)
  Parameter:
    collection_type
Замените строку генератора дат новым набором.
void element_strings(...)
  Parameters:
    string_type first
    string_type second
    string_type third
    string_type fourth
    string_type fifth
    string_type last
    string_type before
    string_type after
    string_type of
Заменить набор элементов генератора дат новыми значениями.
get_partial_date_type(...)
  Return Type:
    facet_type::partial_date_type
  Parameters:
    stream_itr_type next
    stream_itr_type str_end
    ios_base
    facet_type
Шаблонная функция, которая анализирует генератор даты из потока.
Parses a partial_date =>«dd Месяц».
get_nth_kday_type(...)
  Return Type:
    facet_type::nth_kday_type
  Parameters:
    stream_itr_type next
    stream_itr_type str_end
    ios_base
    facet_type
Шаблонная функция, которая анализирует генератор даты из потока.
Парсирует nth_day_of_week_in_month =>«день недели месяца».
get_first_kday_type(...)
  Return Type:
    facet_type::firat_kday_type
  Parameters:
    stream_itr_type next
    stream_itr_type str_end
    ios_base
    facet_type
Шаблонная функция, которая анализирует генератор даты из потока.
Парсирует первый день_of_the_week_in_month =>«первый будний день месяца».
get_last_kday_type(...)
  Return Type:
    facet_type::last_kday_type
  Parameters:
    stream_itr_type next
    stream_itr_type str_end
    ios_base
    facet_type
Шаблонная функция, которая анализирует генератор даты из потока.
Обсуждение Last_day_of_the_week_in_month =>«последний будний день месяца».
get_kday_before_type(...)
  Return Type:
    facet_type::kday_before_type
  Parameters:
    stream_itr_type next
    stream_itr_type str_end
    ios_base
    facet_type
Шаблонная функция, которая анализирует генератор даты из потока.
Parses a first_day_of_the_week_before =>"weekday before"
get_kday_after_type(...)
  Return Type:
    facet_type::kday_after_type
  Parameters:
    stream_itr_type next
    stream_itr_type str_end
    ios_base
    facet_type
Шаблонная функция, которая анализирует генератор даты из потока.
Parses a first_day_of_the_week_after =>"weekday after".

________________________________________

Special Values

Библиотека date_time использует пять специальных значений. Они:

не_a_date_time ng_infin pos_infin min_date_time max_date_time

По умолчанию набор строк, используемых для представления этих типов: «не-дата-время», «-бесконечность», «+бесконечность», «минимум-дата-время», «максимум-дата-время». При выходе min_date-time и max_date_time отображаются как обычные представления даты/времени: «1400-Jan-01» и «9999-Dec-31» соответственно.

Customization

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

Special Values Formatter/Parser Reference
The complete class references can be found here: Special Values Formatter Doxygen Reference and here: Special Values Parser Doxygen Reference

Special Values Formatter Constructor

Syntax Description
special_values_formatter()
Конструктор использует дефолты для специальных строк значений.
special_values_formatter(...)
  Parameters:
    collection_type::iterator
    collection_type::iterator
Конструкции, использующие ценности в сборе. ПРИМЕЧАНИЕ: Используются только первые три строки коллекции. Струны для минимального_date_time и максимального_date_time игнорируются, поскольку эти специальные значения выводятся как обычные даты/время.
special_values_formatter(...)
  Parameters:
    char_type*
    char_type*
Конструирует специальный формататор значений из массива строк.

Special Values Formatter Accessors

Syntax Description
Example
OutItrT put_special(...)
  Parameters:
    OutItrT next
    special_values value
Помещает данное особое значение в поток.
date d1(not_a_date_time); date d2(minimum_date_time); special_values_formatter formatter; formatter.put_special(itr, d1); // Puts: "not-a-date-time" formatter.put_special(itr, d2); // Puts: "1400-Jan-01"

Special Values Parser Constructor

Syntax Description
special_values_parser()
#160;
special_values_parser(...)
  Parameters:
    collection_type::iterator
    collection_type::iterator
Построение парсера специальных значений с использованием струн в коллекции.
special_values_parser(...)
  Parameter:
    scpecial_values_parser
Копировать конструктор.
special_values_parser(...)
  Parameters:
    string_type nadt_str
    string_type neg_inf_str
    string_type pos_inf_str
    string_type min_dt_str
    string_type max_dt_str
Конструирует парсер специальных значений с использованием поставляемых строк.

Special Values Parser Accessors

Syntax Description
Example
void sv_strings(...)
  Parameters:
    string_type nadt_str
    string_type neg_inf_str
    string_type pos_inf_str
    string_type min_dt_str
    string_type max_dt_str
Замените набор специальных строк значений на заданные.
bool match(...)
  Parameters:
    stream_itr_type beg
    stream_itr_type end
    match_results
Возвращается, если анализ был успешным. При успешном разбореmr.current_matchбудут установлены значения int, соответствующие эквивалентному значению special_value.
// stream holds "maximum_date_time" typedef special_values_parser svp; svp parser; svp::match_results mr; if(parser.match(itr, str_end, mr)) {d = date(static_cast( mr.match_results)) } else { // error, failed parse } // d == "9999-Dec-31"

________________________________________

Format Date Parser

Парсер даты формата — объект, удерживающий строки на месяцы и названия будней, а также их сокращения. Настраиваемые наборы строк могут быть установлены во время строительства, или строки в существующем формате_date_parser могут быть заменены через функции доступа. И конструктор, и функции доступа принимают вектор строк в качестве аргументов.

Format Date Parser Reference
The complete class reference can be found here: Doxygen Reference

Format Date Parser Constructor

Syntax Description
format_date_parser(...)
                Parameters:
                string_type format
                std::locale
Создает парсер, который использует заданный формат для парсинга дат (в тех функциях, где нет параметра формата). Используемые названия и сокращения извлекаются из данной местности.
format_date_parser(...)
  Parameters:
    string_type format
    input_collection_type
    input_collection_type
    input_collection_type
    input_collection_type
Создает парсер от использования заданных компонентов. Параметры input_collection_type предназначены для: имен коротких месяцев, имен длинных месяцев, имен коротких дней недели и имен длинных дней недели (в этом порядке). Эти коллекции должны содержать значения для каждого месяца и каждого будня (начиная с января и воскресенья).
format_date_parser(...)
  Parameters:
    format_date_parser
Копировать конструктор

Format Date Parser Accessors

Syntax Description
Example
string_type format()
Возвращает текущую настройку для дисплея диапазона (либо AS_OPEN_RANGE, либо AS_CLOSED_RANGE).
void format(string_type)
Устанавливает формат, который будет использоваться при разборе дат в тех функциях, где нет параметра формата.
void short_month_names(...)
  Parameter:
    input_collection_type names
Замените названия коротких месяцев, используемые парсером. Коллекция должна содержать значения за каждый месяц, начиная с января.
void long_month_names(...)
  Parameter:
    input_collection_type names
Замените названия длинных месяцев, используемые парсером. Коллекция должна содержать значения за каждый месяц, начиная с января.
void short_weekday_names(...)
  Parameter:
    input_collection_type names
Замените короткие будние имена, используемые парсером. Коллекция должна содержать значения для каждого будня, начиная с воскресенья.
void long_weekday_names(...)
  Parameter:
    input_collection_type names
Замените длинные будние имена, используемые парсером. Коллекция должна содержать значения для каждого будня, начиная с воскресенья.
date_type parse_date(...)
  Parameters:
    string_type input
    string_type format 
    special_values_parser
Выберите дату из заданного ввода с использованием заданного формата.
string inp("2005-Apr-15"); string format("%Y-%b-%d"); date d; d = parser.parse_date(inp, format, svp); // d == 2005-Apr-15
date_type parse_date(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
    special_values_parser
Парсировать дату из потока, используя формат парсера.
date_type parse_date(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
    string_type format
    special_values_parser
Просмотр даты из потока с использованием данного формата.
// поток держит формат строки «2005-04-15» («%Y-%m-%d»); дата d; d = parser.parse_date (itr, str_end, format, svp); // d == 2005-Apr-15
month_type parse_month(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
    string_type format
Парсирует месяц от потока с использованием заданного формата. Бросает плохой_месяц, если не в состоянии разобрать.
// поток удерживает формат строки «Март»(«%B»); greg_month m; m = parser.parse_month(itr, str_end, format); // m == March
day_type parse_day_of_month(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
Парсирует день из месяца от потока. День должен выглядеть как двузначное число (01-31), или будет брошен плохой день месяца.
// поток удерживает "01" greg_day d; d = parser.parse_day_of_month (itr, str_end); // d == 1st
day_type parse_var_day_of_month(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
Парсирует день из месяца от потока. День должен выглядеть как одно- или двухзначное число (1-31), или будет брошен плохой день месяца.
// поток удерживает "1" greg_day d; d = parser.parse_var_day_of_month (itr, str_end); // d == 1st
day_of_week_type parse_weekday(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
    string_type format
Парсировать будний день из потока по заданному формату. Бросает плохой будний день, если не в состоянии разобрать.
// stream holds "Tue" string format("%a"); greg_weekday wd; wd = parser.parse_weekday(itr, str_end, format); // wd == Tuesday
year_type parse_year(...)
  Parameters:
    istreambuf_iterator input
    istreambuf_iterator str_end
    string_type format
Парсировать год из потока по заданному формату. Бросает плохой год, если не в состоянии разобрать.
// поток имеет формат строки «98»(«%y»); greg_year y; y = parser.parse_year (itr, str_end, format); // y == 1998

Date Time IO Tutorial

Date Time IO Tutorial

Basic Use | Format Strings | Content Strings | Special Values | Date/Time Periods | Date Generators
Basic Use

Аспекты автоматически пропитываются, когда называются операторы «>>» и «<<». Список объектов date_time, которые можно транслировать:

Gregorian

date, days, date_period, greg_month, greg_weekday, greg_year, partial_date, nth_day_of_the_week_in_month, first_day_of_the_week_in_month, last_day_of_the_week_in_month, first_day_of_the_week_after, first_day_of_the_week_before

Posix_time

ptime, time_period, time_duration

Local_time

local_date_time

Следующим примером является базовое использование нового кода ввода-вывода, использующего все по умолчанию. (Этот пример можно найти вlibs/date_time/examples/tutorial)Каталог

    
  date d(2004, Feb, 29);
  time_duration td(12,34,56,789);
  stringstream ss;
  ss << d << ' ' << td;
  ptime pt(not_a_date_time);
  cout << pt << endl; // "not-a-date-time"
  ss >> pt;
  cout << pt << endl; // "2004-Feb-29 12:34:56.000789"
  ss.str("");
  ss << pt << " EDT-05EDT,M4.1.0,M10.5.0";
  local_date_time ldt(not_a_date_time);
  ss >> ldt;
  cout << ldt << endl; // "2004-Feb-29 12:34:56.000789 EDT"
    
  

В этом примере использовались настройки по умолчанию для граней ввода и вывода. Форматы по умолчанию таковы, что возможна интероперабельность, как показано в примере. ПРИМЕЧАНИЕ: Вводная потоковая передача локального_date_time может быть выполнена только с помощью строкипозикса часового пояса. Формат вывода по умолчанию использует аббревиатуру часового пояса. Формат может быть изменен таким образом и в соответствии (как мы увидим позже в этом руководстве).

Format Strings

Строки формата контролируют порядок, тип и стиль используемых элементов даты/времени. Формы предоставляют некоторые предопределенные форматы (iso_format_specifier, iso_format_extended_specifier и default_date_format), но пользователь может легко создать свой собственный.

(continued from previous example)
    
  local_time_facet* output_facet = new local_time_facet();
  local_time_input_facet* input_facet = new local_time_input_facet();
  ss.imbue(locale(locale::classic(), output_facet));
  ss.imbue(locale(ss.getloc(), input_facet));
  
  output_facet->format("%a %b %d, %H:%M %z");
  ss.str("");
  ss << ldt;
  cout << ss.str() << endl; // "Sun Feb 29, 12:34 EDT"
  output_facet->format(local_time_facet::iso_time_format_specifier);
  ss.str("");
  ss << ldt;
  cout << ss.str() << endl; // "20040229T123456.000789-0500"
 
  output_facet->format(local_time_facet::iso_time_format_extended_specifier);
  ss.str("");
  ss << ldt;
  cout << ss.str() << endl; // "2004-02-29 12:34:56.000789-05:00"
    
  

Строки формата не ограничены элементами даты/времени. Дополнительное слово может быть помещено в строку формата. ПРИМЕЧАНИЕ: Когда дополнительное словосочетание присутствует в формате ввода, вводимые данные также должны содержать точное словосочетание.

(continued from previous example)
    
  // extra words in format
  string my_format("The extended ordinal time %Y-%jT%H:%M can also be \
  represented as %A %B %d, %Y");
  output_facet->format(my_format.c_str());
  input_facet->format(my_format.c_str());
  ss.str("");
  ss << ldt;
  cout << ss.str() << endl;
  // matching extra words in input 
  ss.str("The extended ordinal time 2005-128T12:15 can also be \
  represented as Sunday May 08, 2005");
  ss >> ldt;
  cout << ldt << endl;
    
  
Content Strings

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

Значения по умолчанию для них следующие:

Special values

not-a-date-time, -infinity, +infinity, minimum-date-time, maximum-date-time

Months

Английский календарь и три буквенные сокращения

Weekdays

Английский календарь и три буквенные сокращения

Date generator phrase elements

first, second, third, fourth, fifth, last, before, after, of

ПРИМЕЧАНИЕ: Ранее мы показали, что компоненты представления даты/времени могут быть переупорядочены через строку формата. Это не относится к генераторам дат. Сами элементы могут быть настроены, но их порядок не может быть изменен.

Content Strings

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

(continued from previous example)
    
  // set up the collections of custom strings.
  // only the full names are altered for the sake of brevity
  string month_names[12] = { "january", "february", "march", 
                             "april", "may", "june", 
                             "july", "august", "september", 
                             "october", "november", "december" };
  vector<string> long_months(&month_names[0], &month_names[12]);
  string day_names[7] = { "sunday", "monday", "tuesday", "wednesday", 
                          "thursday", "friday", "saturday" };
  vector<string> long_days(&day_names[0], &day_names[7]);
  
  //  create date_facet and date_input_facet using all defaults
  date_facet* date_output = new date_facet();
  date_input_facet* date_input = new date_input_facet();
  ss.imbue(locale(ss.getloc(), date_output)); 
  ss.imbue(locale(ss.getloc(), date_input));
  // replace names in the output facet
  date_output->long_month_names(long_months);
  date_output->long_weekday_names(long_days);
  
  // replace names in the input facet
  date_input->long_month_names(long_months);
  date_input->long_weekday_names(long_days);
  
  // customize month, weekday and date formats
  date_output->format("%Y-%B-%d");
  date_input->format("%Y-%B-%d");
  date_output->month_format("%B"); // full name
  date_input->month_format("%B"); // full name
  date_output->weekday_format("%A"); // full name
  date_input->weekday_format("%A"); // full name
  ss.str("");
  ss << greg_month(3);
  cout << ss.str() << endl; // "march"
  ss.str("");
  ss << greg_weekday(3);
  cout << ss.str() << endl; // "tuesday"
  ss.str("");
  ss << date(2005,Jul,4);
  cout << ss.str() << endl; // "2005-july-04"
    
  
Special Values

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

(continued from previous example)
    
  // reset the formats to defaults
  output_facet->format(local_time_facet::default_time_format);
  input_facet->format(local_time_input_facet::default_time_input_format);
  // create custom special_values parser and formatter objects
  // and add them to the facets
  string sv[5] = {"nadt","neg_inf", "pos_inf", "min_dt", "max_dt" };
  vector<string> sv_names(&sv[0], &sv[5]);
  special_values_parser sv_parser(sv_names.begin(), sv_names.end());
  special_values_formatter sv_formatter(sv_names.begin(), sv_names.end());
  output_facet->special_values_formatter(sv_formatter);
  input_facet->special_values_parser(sv_parser);
  ss.str("");
  ldt = local_date_time(not_a_date_time);
  ss << ldt;
  cout << ss.str() << endl; // "nadt"
  
  ss.str("min_dt");
  ss >> ldt;
  ss.str("");
  ss << ldt;
  cout << ss.str() << endl; // "1400-Jan-01 00:00:00 UTC"
    
  

ПРИМЕЧАНИЕ: несмотря на то, что мы отправили строки для min и max в форматировщик, они игнорируются, потому что эти специальные значения строятся на фактические даты (как показано выше).

Date/Time Periods

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

(continued from previous example)
    
  // all formats set back to defaults (not shown for brevity)
  // create our date_period
  date_period dp(date(2005,Mar,1), days(31)); // month of march
  // custom period formatter and parser
  period_formatter per_formatter(period_formatter::AS_OPEN_RANGE, 
                                 " to ", "from ", " exclusive", " inclusive" );
  period_parser per_parser(period_parser::AS_OPEN_RANGE, 
                           " to ", "from ", " exclusive" , "inclusive" );
  
  // default output
  ss.str("");
  ss << dp;
  cout << ss.str() << endl; // "[2005-Mar-01/2005-Mar-31]"
 
  // add out custom parser and formatter to  the facets
  date_output->period_formatter(per_formatter);
  date_input->period_parser(per_parser);
  
  // custom output
  ss.str("");
  ss << dp;
  cout << ss.str() << endl; // "from 2005-Feb-01 to 2005-Apr-01 exclusive"
    
  
Date Generators

Настройка ввода и вывода генераторов дат производится путем замены существующих строк (в аспекте) новыми строками.

ПРИМЕЧАНИЕ: Ранее мы показали, что компоненты представления даты/времени могут быть переупорядочены через строку формата. Это не относится к генераторам дат. Сами элементы могут быть настроены, но их порядок не может быть изменен.

(continued from previous example)
    
  // custom date_generator phrases
  string dg_phrases[9] = { "1st", "2nd", "3rd", "4th", "5th", 
                           "final", "prior to", "following", "in" };
  vector<string> phrases(&dg_phrases[0], &dg_phrases[9]);
  // create our date_generator
  first_day_of_the_week_before d_gen(Monday);
  // default output
  ss.str("");
  ss << d_gen;
  cout << ss.str() << endl; // "Mon before"
 
  // add our custom strings to the date facets
  date_output->date_gen_phrase_strings(phrases);
  date_input->date_gen_element_strings(phrases);
  
  // custom output
  ss.str("");
  ss << d_gen;
  cout << ss.str() << endl; // "Mon prior to"
    
  

PrevUpHomeNext

Статья Date Time Input/Output раздела 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:41:27/0.023258924484253/1