![]() |
![]() ![]() ![]() ![]() |
![]() |
Date Time Input/OutputBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 10. Boost.Date_Time
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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" |
| 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.
# Флаги, которые имеют зависимое от платформы поведение. Их не везде можно поддержать.
! Флаги, которые в настоящее время не работают для ввода.
В следующей таблице перечислены имеющиеся аспекты.
* Эти ссылки приводят к разделам ссылкиtime_facetиtime_input_facet. Это не реальные классы, а типизированные.
Для реализации новых граней i/o библиотека даты-времени использует ряд новых парсеров и форматировщиков. Эти классы доступны для пользователей, которые хотят реализовать специализированные процедуры ввода / вывода.
| Output | Input |
|---|---|
period_formatter |
period_parser |
date_generator_formatter |
date_generator_parser |
special_values_formatter |
special_values_parser |
| #160; | format_date_parser |
Повышение::date_time::date_facetпозволяет пользователям иметь значительный контроль над потоковой передачей дат на выходе (и других григорианских объектов). Дата_facet типизирована вгригорианскомпространстве имен какдата_facetиwdate_facet.
| 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_time:::date_input_facetпозволяет пользователям иметь значительный контроль над тем, как даты (и другие грегорианские объекты) передаются в потоковом режиме. Дата_input_facet типизирована вгригорианскомпространстве имен какдата_input_facetиwdate_input_facet.
| 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. |
«первый месяц до» // дефолты |
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.
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. |
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.
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) |
Получает временной период из потока. Формат дат/времен будет использовать формат, установленный форматомили форматом даты и времени по умолчанию. Тип периода (открытый или закрытый диапазон) и используемые разграничители - это те, которые используются периодом. |
| См.учебникдля полного примера. |
Period_formatter и period_parser обеспечивают единый интерфейс для ввода и вывода date_periods, time_periods и в будущем выпуске local_date_time_periods. Пользователь имеет контроль над разграничителями, форматами компонентов даты/времени и формой периода. Формат компонентов даты/времени контролируется через элементы ввода и вывода даты_времени.
Периоды строятся с открытыми параметрами. Первое значение является отправной точкой и включается в период. Конечное значение не включается, но сразу следует за последним значением: [начало/конец]. Тем не менее, период можно транслировать как открытый диапазон или закрытый диапазон.
[2003-Jan-01/2003-Dec-31] <-- period holding 365 days [2003-Jan-01/2004-Jan-01) <-- period holding 365 days
Есть четыре разграничителя. Значения по умолчанию являются
| "\" - разделитель |
| "[] - стартовый делимитер |
| ") - конечный разграничитель открытого диапазона |
| "] - конечный делимитер замкнутого диапазона |
Пользователь может предоставить пользовательский набор разграничителей. Пользовательские разграничители могут содержать пробелы.
Форма периода и разграничители могут быть установлены в качестве параметров конструкции или с помощью функций аксессуара. Пользовательский парсер / формататор периода может затем использоваться в качестве параметра конструкции для нового аспекта или может быть установлен в существующем аспекте с помощью функции доступа.
Period Formatter Doxygen Reference and here: Period Parser Doxygen Reference
| 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*: разделитель периода, начальный делимитер, конечный делимитер открытого диапазона и конечный делимитер закрытого диапазона. |
| 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 |
Помещает период в поток, используя заданные значения для делимитера, разделителя и дисплея диапазона. Параметр граней используется для постановки даты (или времени) объектов периода. |
| 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) |
Копировать конструктор |
| 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_generator обеспечивают гибкость, позволяя пользователю использовать пользовательские «элементы фразы». Эти элементы фразы являются промежуточными словами в генераторах дат. Например, в date_generator "Второй понедельник марта", "Второй" и "Второй" - элементы фразы, где "Понедельник" и "Март" - элементы даты. Настройка элементов даты производится с гранью. Порядок даты и элементы фразы изменить нельзя. При разборе все элементы фразы date_generator должны быть правильно разобраны или ios_base:
По умолчанию «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 Formatter Doxygen Reference and here: Date Generator Parser Doxygen Reference
| 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 с использованием заданных строк элементов. |
| 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» => |
| 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 с использованием заданных строк элементов. |
| 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". |
________________________________________
Библиотека 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» соответственно.
Парсер/форматтер специальных значений позволяет пользователю устанавливать пользовательские строки для этих специальных значений. Эти строки могут быть установлены в качестве параметров конструкции для нового аспекта или могут быть установлены в существующем аспекте через функцию доступа.
Special Values Formatter Doxygen Reference and here: Special Values Parser Doxygen Reference
| 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* |
Конструирует специальный формататор значений из массива строк. |
| 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" |
| 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 |
Конструирует парсер специальных значений с использованием поставляемых строк. |
| 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 |
________________________________________
Парсер даты формата — объект, удерживающий строки на месяцы и названия будней, а также их сокращения. Настраиваемые наборы строк могут быть установлены во время строительства, или строки в существующем формате_date_parser могут быть заменены через функции доступа. И конструктор, и функции доступа принимают вектор строк в качестве аргументов.
Doxygen Reference
| 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 |
Копировать конструктор |
| 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, которые можно транслировать:
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
ptime,
time_period,
time_duration
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 может быть выполнена только с помощью строкипозикса часового пояса. Формат вывода по умолчанию использует аббревиатуру часового пояса. Формат может быть изменен таким образом и в соответствии (как мы увидим позже в этом руководстве).
Строки формата контролируют порядок, тип и стиль используемых элементов даты/времени. Формы предоставляют некоторые предопределенные форматы (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;
До сих пор мы показали, как пользователь может добиться большой настройки с минимальными усилиями, используя форматы. Дальнейшая настройка может быть достигнута с помощью определенных пользователем элементов (т.е. строк). Элементы, которые могут быть настроены: специальные имена значений, имена месяцев, аббревиатуры месяца, названия будни, аббревиатуры будни, разграничители даты / периодов времени и элементы фразы генераторов даты.
Значения по умолчанию для них следующие:
not-a-date-time,
-infinity,
+infinity,
minimum-date-time,
maximum-date-time
Английский календарь и три буквенные сокращения
Английский календарь и три буквенные сокращения
first,
second,
third,
fourth,
fifth,
last,
before,
after,
of
ПРИМЕЧАНИЕ: Ранее мы показали, что компоненты представления даты/времени могут быть переупорядочены через строку формата. Это не относится к генераторам дат. Сами элементы могут быть настроены, но их порядок не может быть изменен.
Чтобы проиллюстрировать возможности настройки, мы будем использовать пользовательские строки в течение месяцев и будни (мы будем использовать только длинные имена, для этого примера).
(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"
Настройка ввода и вывода специальных значений лучше всего осуществляется путем создания нового специального_значения_парсера и специального_значения_форматтера. Новые струны могут быть установлены во время строительства (как в примере ниже).
(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 в форматировщик, они игнорируются, потому что эти специальные значения строятся на фактические даты (как показано выше).
Настройка ввода и вывода периодов лучше всего осуществляется путем создания нового парсера периодов и формата периодов. Новые струны могут быть установлены во время строительства (как в примере ниже).
(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"
Настройка ввода и вывода генераторов дат производится путем замены существующих строк (в аспекте) новыми строками.
ПРИМЕЧАНИЕ: Ранее мы показали, что компоненты представления даты/времени могут быть переупорядочены через строку формата. Это не относится к генераторам дат. Сами элементы могут быть настроены, но их порядок не может быть изменен.
(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"
Статья Date Time Input/Output раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 10. Boost.Date_Time может быть полезна для разработчиков на c++ и boost.
:: Главная :: Chapter 10. Boost.Date_Time ::
реклама |