Пространства имён
Варианты
Действия

std::formatter<std::chrono::local_time>, std::chrono::local_time_format

Материал из cppreference.com
< cpp‎ | chrono‎ | local t
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
std::chrono::local_t
Ввод/Вывод момента времени
formatter<std::chrono::local_time>
 
Определено в заголовочном файле <chrono>
template<class Duration, class CharT>
struct formatter<std::chrono::local_time<Duration>, CharT>;
(1)
template<class Duration>

struct/*local-time-format-t*/{
    std::chrono::local_time<Duration> time;// только для пояснения
    conststd::string* abbrev;              // только для пояснения
    conststd::chrono::seconds* offset;     // только для пояснения

};
(2) (только для пояснения*)
template<class Duration>

/*local-time-format-t*/<Duration>
    local_time_format(conststd::chrono::local_time<Duration>& tp,
                      conststd::string* abbrev = nullptr,

                      conststd::chrono::seconds* offset_sec = nullptr);
(3)
template<class Duration, class CharT>
struct formatter</*local-time-format-t*/<Duration>, CharT>;
(4)

Специализация std::formatter, определяющая правила форматирования для std::chrono::local_time.

1) Если используется %Z, %z или модифицированный вариант %z, генерируется std::format_error.
2-4) Функция local_time_format возвращает значение неопределённого типа, которое содержит местное время, смещение и аббревиатуру часового пояса.
Когда объект f этого неопределённого типа форматируется, если используется %Z, оно заменяется на *f.abbrev, расширенного до CharT если f.abbrev не равно null; иначе генерируется std::format_error. Если используется %z или его модифицированный вариант, смещение *f.offset_sec будет отформатировано, если f.offset_sec не равно null; иначе генерируется std::format_error.

std::formatter обычно не используется напрямую, а используется через функции форматирования.

[править]Спецификация формата

Спецификация формата имеет вид

заполнитель-и-выравнивание (необязательно)ширина (необязательно)точность (необязательно)L(необязательно)chrono-спецификация (необязательно)

заполнитель-и-выравнивание, ширина и точность имеют то же значение, что и в стандартной спецификации формата. точность допустима только для типов std::chrono::duration, где тип представления Rep является типом с плавающей запятой, иначе выбрасывается std::format_error.

Локаль, используемая для форматирования, определяется следующим образом:

  • локаль по умолчанию "C", если L отсутствует в спецификации формата,
  • иначе локаль, обозначенная std::locale, передаётся функции форматирования, если таковая имеется,
  • иначе присутствует (L, но std::locale не передаётся функции форматирования), глобальная локаль.

chrono-спецификация состоит из одного или нескольких спецификаторов преобразования и обычных символов (кроме {, } и %). chrono-спецификация должна начинаться со спецификатора преобразования. Все обычные символы выводятся без изменений. Каждый спецификатор немодифицированного преобразования начинается с символа %, за которым следует символ, определяющий поведение спецификатора. Некоторые спецификаторы преобразования имеют изменённую форму, в которой символ модификатора E или O вставляется после символа %. Каждый спецификатор преобразования заменяется соответствующими символами в выходных данных, как описано ниже.

Если chrono-спецификация пуста, объект chrono форматируется, как если бы он направлялся в объект os типа std::basic_ostringstream<CharT> с внедрённой локалью форматирования (один из std::locale::classic(), переданный объект std::locale, и std::locale::global()) и копированием os.str() в выходной буфер с дополнительным заполнителем и корректировками в соответствии со спецификаторами формата.

Доступны следующие спецификаторы формата:

Спецификатор
преобразования
Объяснение
%% Записывает литеральный символ %.
%n Записывает символ новой строки.
%t Записывает символ горизонтальной табуляции.
Год
%C
%EC
Записывает год, разделённый на 100, используя деление по минимому. Если результатом является одна десятичная цифра, перед ней ставится 0.

Модифицированная команда %EC записывает альтернативное представление века в локали.

%y
%Oy
%Ey
Записывает две последние десятичные цифры года. Если результат представляет собой одну цифру, перед ним ставится 0.

Модифицированная команда %Oy записывает альтернативное представление локали.

Модифицированная команда %Ey записывает альтернативное представление локали смещения от %EC (только год).

%Y
%EY
Записывает год в виде десятичного числа. Если результат меньше четырёх цифр, он дополняется слева цифрами от 0 до четырёх.

Модифицированная команда %EY записывает альтернативное представление полного года локали.

Месяц
%b
%h
Записывает сокращённое название месяца локали.
%B Записывает полное название месяца локали.
%m
%Om
Записывает месяц в виде десятичного числа (январь равен 01). Если результатом является одна цифра, перед ней ставится 0.

Модифицированная команда %Om записывает альтернативное представление локали.

День
%d
%Od
Записывает день месяца в виде десятичного числа. Если результатом является одна десятичная цифра, перед ней ставится 0.

Модифицированная команда %Od записывает альтернативное представление локали.

%e
%Oe
Записывает день месяца в виде десятичного числа. Если результатом является одна десятичная цифра, перед ней ставится пробел.

Модифицированная команда %Oe записывает альтернативное представление локали.

День недели
%a Записывает сокращённое название дня недели для локали.
%A Записывает полное название дня недели локали.
%u
%Ou
Записывает день недели ISO в виде десятичного числа (1-7), где понедельник равен 1.

Модифицированная команда %Ou записывает альтернативное представление локали.

%w
%Ow
Записывает день недели в виде десятичного числа (0-6), где воскресенье равно 0.

Модифицированная команда %Ow записывает альтернативное представление локали.

Основанный на неделях год ISO 8601

В ISO 8601 недели начинаются с понедельника, и первая неделя года должна соответствовать следующим требованиям:

  • Включать 4 января
  • Включать первый четверг года
%g Записывает две последние десятичные цифры года ISO 8601, основанного на неделях. Если результат представляет собой одну цифру, перед ним ставится 0.
%G Записывает основанный на неделях год ISO 8601 в виде десятичного числа. Если результат меньше четырёх цифр, он дополняется слева цифрами от 0 до четырёх.
%V
%OV
Записывает неделю года по ISO 8601 в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.

Модифицированная команда %OV записывает альтернативное представление локали.

Неделя/день года
%j Записывает день года в виде десятичного числа (1 января 001). Если результат меньше трёх цифр, он дополняется слева от 0 до трёх цифр.
%U
%OU
Записывает номер недели года в виде десятичного числа. Первое воскресенье года это первый день недели 01. Дни того же года, предшествующие этому, относятся к неделе 00. Если результат представляет собой однознаковое число, перед ним ставится 0.

Модифицированная команда %OU записывает альтернативное представление локали.

%W
%OW
Записывает номер недели года в виде десятичного числа. Первый понедельник года это первый день недели 01. Дни того же года, предшествующие этому, относятся к неделе 00. Если результат представляет собой однознаковое число, перед ним ставится 0.

Модифицированная команда %OW записывает альтернативное представление локали.

Дата
%D Эквивалент "%m/%d/%y".
%F Эквивалент "%Y-%m-%d".
%x
%Ex
Записывает представление даты локали.

Модифицированная команда %Ex создаёт альтернативное представление даты локали.

Время суток
%H
%OH
Записывает час (в 24-часовом формате) в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.

Модифицированная команда %OH записывает альтернативное представление локали.

%I
%OI
Записывает час (12-часовой формат) в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.

Модифицированная команда %OI записывает альтернативное представление локали.

%M
%OM
Записывает минуты в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.

Модифицированная команда %OM записывает альтернативное представление локали.

%S
%OS
Записывает секунды как десятичное число. Если количество секунд меньше 10, к результату добавляется префикс 0.

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

Модифицированная команда %OS записывает альтернативное представление локали.

%p Записывает локализованный эквивалент обозначений AM/PM, связанных с 12-часовым форматом времени.
%R Эквивалент "%H:%M".
%T Эквивалент "%H:%M:%S".
%r Записывает местное 12-часовое время.
%X
%EX
Записывает представление времени локали.

Модифицированная команда %EX записывает альтернативное представление времени локали.


Часовой пояс
%z
%Ez
%Oz
Записывает смещение от UTC в формате ISO 8601. Например, -0430 означает отставание от UTC на 4 часа 30 минут. Если смещение равно нулю, используется +0000.

Модифицированные команды %Ez и %Oz вставляют : между часами и минутами (например, -04:30).

%Z Записывает аббревиатуру часового пояса.
Разное
%c
%Ec
Записывает представление даты и времени локали.

Модифицированная команда %Ec записывает альтернативное представление даты и времени локали.

Следующие спецификаторы распознаются, но вызывают исключение std::format_error:

Спецификатор
преобразования
Объяснение
Счётчик длительности
%Q Записывает количество тиков длительности, т.е. значение, полученное через count().
%q Записывает суффикс единицы длительности, как указано в operator<<().

[править]Пример

[править] Смотрите также

(C++20)
сохраняет форматированное представление аргументов в новой строке
(шаблон функции)[править]
close