|  | 
|      | 
|  | 
| 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 | Парсирует период из потока. Параметры итератора указывают на начало и конец потока. Продолжительность_тип имеет отношение к типу периода, например: A date_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 ::
| реклама |