std::formatter<std::chrono::gps_time>
Определено в заголовочном файле <chrono>
|
||
template<class Duration, class CharT> struct formatter<std::chrono::gps_time<Duration>, CharT>; |
(начиная с C++20) | |
Специализация std::formatter, которая определяет правила форматирования для std::chrono::gps_time.
Если используется %Z
, оно заменяется на "GPS", расширенное до CharT
. Если используется %z
или его модифицированный вариант, будет отформатировано смещение 0min
.
Отформатированные дата и время эквивалентны форматированию для std::chrono::sys_time, инициализированного с помощью std::chrono::sys_time<Duration>(tp.time_since_epoch()) + std::chrono::days(3657).
Специализация 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.
Модифицированная команда | |
%y %Oy %Ey
|
Записывает две последние десятичные цифры года. Если результат представляет собой одну цифру, перед ним ставится 0.
Модифицированная команда Модифицированная команда | |
%Y %EY
|
Записывает год в виде десятичного числа. Если результат меньше четырёх цифр, он дополняется слева цифрами от 0 до четырёх.
Модифицированная команда | |
Месяц | ||
%b %h
|
Записывает сокращённое название месяца локали. | |
%B
|
Записывает полное название месяца локали. | |
%m %Om
|
Записывает месяц в виде десятичного числа (январь равен 01 ). Если результатом является одна цифра, перед ней ставится 0.
Модифицированная команда | |
День | ||
%d %Od
|
Записывает день месяца в виде десятичного числа. Если результатом является одна десятичная цифра, перед ней ставится 0.
Модифицированная команда | |
%e %Oe
|
Записывает день месяца в виде десятичного числа. Если результатом является одна десятичная цифра, перед ней ставится пробел.
Модифицированная команда | |
День недели | ||
%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
|
Записывает представление времени локали.
Модифицированная команда
| |
Часовой пояс | ||
%z %Ez %Oz
|
Записывает смещение от UTC в формате ISO 8601. Например, -0430 означает отставание от UTC на 4 часа 30 минут. Если смещение равно нулю, используется +0000 .
Модифицированные команды | |
%Z
|
Записывает аббревиатуру часового пояса. | |
Разное | ||
%c %Ec
|
Записывает представление даты и времени локали.
Модифицированная команда |
Следующие спецификаторы распознаются, но вызывают исключение std::format_error:
Спецификатор преобразования |
Объяснение | |
---|---|---|
Счётчик длительности | ||
%Q
|
Записывает количество тиков длительности, т.е. значение, полученное через count(). | |
%q
|
Записывает суффикс единицы длительности, как указано в operator<<(). |
[править] Пример
#include <iostream> #include <format> #include <chrono> int main() { std::chrono::time_point<std::chrono::utc_clock> epoch; std::cout << std::format("Время эпохи Unix было {0:%F}T{0:%R%z}.", epoch); }
Вывод:
Время эпохи Unix было 1970-01-01T00:00+0000.
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
WG не указан | C++20 | formatter использовал глобальную или переданную локаль
|
локаль по умолчанию "C" используется, когда L отсутствует
|
[править] Смотрите также
(C++20) |
сохраняет форматированное представление аргументов в новой строке (шаблон функции) |