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

Boost.Locale: Numbers, Time and Currency formatting and parsing

Boost , ,

Numbers, Time and Currency formatting and parsing

Все форматирование и разбор выполняется через стандартные потоки ввода/вывода. Каждый из вышеперечисленных типов информации представлен в виде числа. Форматирование информации осуществляется с помощью манипуляторов iostream. Все манипуляторы размещены вбустере::locale::asПространство имен.

Например:

cout << as::currency << 123.45 << endl;
// display 123.45 in local currency representation.
cin >> as::currency >> x ;
// 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– номер формата как «процентный» формат. Например:
    cout<<как::%<< 0,25<
    Создал бы выход, который может выглядеть так:
       25%

    Would create an output that may look like this:
        25%

    [ORIG_END] -->
  • 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поддерживаются.

Например:

time_t now=time(0);
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– параметризированный манипулятор, который устанавливает идентификатор зоны времени для форматирования и разбора дат. Он принимает струнный параметр, который представляет собой идентификатор часового пояса.

Например:

double now=time(0);
cout << as::datetime << as::local_time << "Local time is: "<< now << endl;
cout << as::gmt << "GMT Time is: "<< now <<endl;
cout << as::time_zone("EST") << "Eastern Standard Time is: "<< now <<endl;

Существует список поддерживаемых<strftime>флагов ICU backend:

  • %a– сокращенно будний день (солнце).
  • %A– Полный рабочий день (воскресенье)
  • %b– сокращенный месяц (январь).
  • %B– Полный месяц (январь)
  • %c– Местный формат даты-времени.Примечание:предпочитают использоватьas::datetime
  • %d– День месяца [01,31]
  • %e– День месяца [1,31]
  • %h– Тот же%b
  • %H– 24 часа [00,23]
  • %I– 12 часов [01,12]
  • %j– День года [1366]
  • %m– Месяц [01,12]
  • %M– минута [00,59]
  • %n– Новая линия
  • %p– AM/PM в локальном представлении
  • %r– Время с AM/PM, такое же, как%I:%M:%S%p
  • %R– То же, что%H:%M
  • %S– Второй [00,61]
  • %t– Таб-персонаж
  • %T– Тот же%H:%M:%S
  • %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.




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



:: Главная :: ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 04:02:17/0.0068368911743164/1