std::formatter<std::chrono::month_day>
| Определено в заголовочном файле <chrono>
|
||
template<class CharT> struct formatter<std::chrono::month_day, CharT>; |
(начиная с C++20) | |
Специализация std::formatter, которая определяет правила форматирования для std::chrono::month_day.
Специализация 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
|
Записывает символ горизонтальной табуляции. | |
| Месяц | ||
%b%h
|
Записывает сокращённое название месяца локали. | |
%B
|
Записывает полное название месяца локали. | |
%m%Om
|
Записывает месяц в виде десятичного числа (январь равен 01). Если результатом является одна цифра, перед ней ставится 0.
Модифицированная команда | |
| День | ||
%d%Od
|
Записывает день месяца в виде десятичного числа. Если результатом является одна десятичная цифра, перед ней ставится 0.
Модифицированная команда | |
%e%Oe
|
Записывает день месяца в виде десятичного числа. Если результатом является одна десятичная цифра, перед ней ставится пробел.
Модифицированная команда | |
Следующие спецификаторы распознаются, но вызывают исключение std::format_error:
| Спецификатор преобразования |
Объяснение | |
|---|---|---|
| Год | ||
%C %EC
|
Записывает год, разделённый на 100, используя деление по минимому. Если результатом является одна десятичная цифра, перед ней ставится 0.
Модифицированная команда | |
%y %Oy %Ey
|
Записывает две последние десятичные цифры года. Если результат представляет собой одну цифру, перед ним ставится 0.
Модифицированная команда Модифицированная команда | |
%Y %EY
|
Записывает год в виде десятичного числа. Если результат меньше четырёх цифр, он дополняется слева цифрами от 0 до четырёх.
Модифицированная команда | |
| День недели | ||
%a
|
Записывает сокращённое название дня недели для локали. | |
%A
|
Записывает полное название дня недели локали. | |
%u%Ou
|
Записывает день недели ISO в виде десятичного числа (1-7), где понедельник равен 1.
Модифицированная команда | |
%w%Ow
|
Записывает день недели в виде десятичного числа (0-6), где воскресенье равно 0.
Модифицированная команда | |
| Основанный на неделях год ISO 8601 | ||
|
В ISO 8601 недели начинаются с понедельника, и первая неделя года должна соответствовать следующим требованиям:
| ||
%g
|
Записывает две последние десятичные цифры года ISO 8601, основанного на неделях. Если результат представляет собой одну цифру, перед ним ставится 0. | |
%G
|
Записывает основанный на неделях год ISO 8601 в виде десятичного числа. Если результат меньше четырёх цифр, он дополняется слева цифрами от 0 до четырёх. | |
%V%OV
|
Записывает неделю года по ISO 8601 в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.
Модифицированная команда | |
| Неделя/день года | ||
%j
|
Записывает день года в виде десятичного числа (1 января 001). Если результат меньше трёх цифр, он дополняется слева от 0 до трёх цифр.
| |
%U%OU
|
Записывает номер недели года в виде десятичного числа. Первое воскресенье года это первый день недели 01. Дни того же года, предшествующие этому, относятся к неделе 00. Если результат представляет собой однознаковое число, перед ним ставится 0.
Модифицированная команда | |
%W%OW
|
Записывает номер недели года в виде десятичного числа. Первый понедельник года это первый день недели 01. Дни того же года, предшествующие этому, относятся к неделе 00. Если результат представляет собой однознаковое число, перед ним ставится 0.
Модифицированная команда | |
| Дата | ||
%D
|
Эквивалент "%m/%d/%y".
| |
%F
|
Эквивалент "%Y-%m-%d".
| |
%x%Ex
|
Записывает представление даты локали.
Модифицированная команда | |
| Время суток | ||
%H%OH
|
Записывает час (в 24-часовом формате) в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.
Модифицированная команда | |
%I%OI
|
Записывает час (12-часовой формат) в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.
Модифицированная команда | |
%M%OM
|
Записывает минуты в виде десятичного числа. Если результатом является одна цифра, перед ней ставится 0.
Модифицированная команда | |
%S%OS
|
Записывает секунды как десятичное число. Если количество секунд меньше 10, к результату добавляется префикс 0.
Если точность ввода не может быть точно представлена секундами, то формат представляет собой десятичное число с плавающей запятой с фиксированным форматом и точностью, соответствующих точности ввода (или с точностью до микросекунд, если преобразование в десятичные секунды с плавающей запятой не может быть сделано в пределах 18 дробных цифр). Символ десятичной точки локализован в соответствии с региональными настройками. Модифицированная команда | |
%p
|
Записывает локализованный эквивалент обозначений AM/PM, связанных с 12-часовым форматом времени. | |
%R
|
Эквивалент "%H:%M".
| |
%T
|
Эквивалент "%H:%M:%S".
| |
%r
|
Записывает местное 12-часовое время. | |
%X%EX
|
Записывает представление времени локали.
Модифицированная команда | |
| Счётчик длительности | ||
%Q
|
Записывает количество тиков длительности, т.е. значение, полученное через count(). | |
%q
|
Записывает суффикс единицы длительности, как указано в operator<<(). | |
| Часовой пояс | ||
%z%Ez%Oz
|
Записывает смещение от UTC в формате ISO 8601. Например, -0430 означает отставание от UTC на 4 часа 30 минут. Если смещение равно нулю, используется +0000.
Модифицированные команды | |
%Z
|
Записывает аббревиатуру часового пояса. | |
| Разное | ||
%c%Ec
|
Записывает представление даты и времени локали.
Модифицированная команда | |
Пример
#include <chrono>
#include <format>
#include <iostream>
int main()
{
using namespace std::chrono_literals;
constexpr std::chrono::month_day md{std::chrono::February / 29d};
std::cout << "%B: " << std::format("{:%B}", md) << '\n'
<< "%d: " << std::format("{:%d}", md) << '\n';
}
Вывод:
%B: February
%d: 29
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| WG не указан | C++20 | formatter использовал глобальную или переданную локаль
|
используется локаль по умолчанию "C", когдаL отсутствует
|
Смотрите также
(C++20) |
сохраняет форматированное представление аргументов в новой строке (шаблон функции) |