Все форматирование и разбор выполняется через стандартные потоки ввода/вывода. Каждый из вышеперечисленных типов информации представлен в виде числа. Форматирование информации осуществляется с помощью манипуляторов iostream. Все манипуляторы размещены вбустере::locale::asПространство имен.
// Parse currency representation and store it in x
Существует специальный манипулятор<as::posix>, который «разгружает» локально-специфические настройки и возвращает их к методам форматирования и разбора по умолчанию<iostream>. Обратите внимание, что такие форматы могут быть локализованы по умолчанию<std::num_put>и<std::num_get>.
Numbers and number manipulators
Вот манипуляторы для форматирования чисел:
as::number– номер формата согласно местным спецификациям, он учитывает различныеstd::ios_baseфлаги, такие как научный формат и точность.
as::percent– номер формата как «процентный» формат. Например:
as::spellout– запишите число. Например, в английском языке 103 может отображаться как «сто три».Примечание:не во всех местах установлены правила написания чисел. В таком случае число будет отображаться в десятичном формате.
as::ordinal– отобразить порядок элемента. Например, «2» будет отображаться как «2-й» в английском языке. Как и в вышеприведенном случае, не все локации предусматривают порядковые правила.
Currency formatting
Это манипуляторы для форматирования валют:
as::currency– установить формат в валютном режиме.
as::currency_iso– изменить формат валюты на международный, как «USD» вместо «$». Этот флаг поддерживается при использовании ICU 4.2 и выше.
as::currency_national– изменить формат валюты на национальный, как «$».
as::currency_default– возврат к дефолтному (национальному) валютному формату.
Note
as::currency_XYZ manipulators have no effect on general formatting, only on the currency format. You must use both currency and number manipulators to use a non-default format.
Date and Time formatting
Даты и время представлены как время POSIX. Когда форматирование даты включено в<iostream>, каждое число рассматривается как время POSIX. Число может быть целым или двойным.
Существует четыре основных манипулятора для форматирования даты и времени:
as::date– только дата
as::time– только время
as::datetime– дата и время
as::ftime– параметризованный манипулятор, позволяющий задавать время в формате, используемом в функцииstrftime.Примечание:не все флаги форматированияstrftimeподдерживаются.
cout << "Today is "<< as::date << now << " and tomorrow is " << now+24*3600 << endl;
cout << "Current time is "<< as::time << now << endl;
cout << "The current weekday is "<< as::ftime("%A") << now << endl;
Более точный контроль форматирования даты также доступен:
as::time_default,as::time_short,as::time_medium,as::time_long,as::time_full– изменение форматирования времени.
as::date_default,as::date_short,as::date_medium,as::date_long,as::date_full– изменение форматирования даты.
Эти манипуляторы, когда они используются вместе с манипуляторами<as::date>,<as::time>или<as::datetime>, изменяют представление даты-времени. Формат по умолчанию является средним.
По умолчанию дата и время указаны в местном часовом поясе. Это поведение может быть изменено следующими манипуляторами:
as::gmt– дата и время отображения в GMT.
as::local_time– отображение в локальном часовом поясе (по умолчанию).
as::time_zone– параметризированный манипулятор, который устанавливает идентификатор зоны времени для форматирования и разбора дат. Он принимает струнный параметр, который представляет собой идентификатор часового пояса.
%x– Местное представление даты.Примечание:предпочитают использоватьas::date
%X– Местное представление времени.Примечание:предпочитают использоватьas::time
%y– Год [00,99]
%Y– 4 цифры года. (2009)
%Z– часовой пояс
%%– Процентный символ
Неподдерживаемые<strftime>флаги:<%C>,<%u>,<%U>,<%V>,<%w>,<%W>. Также не поддерживаются<O>и<E>модификаторы.
Общиерекомендации
Предпочитает использовать общие манипуляторы с указанием даты, а не полный форматas::ftime.
Помните, что нынешние календари могут быть не григорианскими.
Internals
Форматирование информации хранится в классе потоков с использованием функций<xalloc>,<pword>и<register_callback>членов<std::ios_base>. Вся информация хранится и управляется с помощью специального объекта, связанного с<iostream>, и манипуляторы просто меняют свое состояние.
Когда число записывается или читается из потока, пользовательский буст. Локальный аспект обращается к объекту и проверяет необходимую информацию форматирования. Затем он создает специальный объект, который фактически форматирует число и кэширует его в<iostream>. В следующий раз, когда число записывается в поток, будет использоваться тот же формататор, если не изменились некоторые флаги и объект форматирования недействителен.
Статья Boost.Locale: Numbers, Time and Currency formatting and parsing раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.