std::chrono::from_stream (std::chrono::year_month)
Определено в заголовочном файле <chrono> | ||
|---|---|---|
template< class CharT, class Traits, class Alloc = std::allocator<CharT> >
std::basic_istream<CharT, Traits>&
from_stream( std::basic_istream<CharT, Traits>& is, const CharT* fmt,
std::chrono::year_month& ym,
std::basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
std::chrono::minutes* offset = nullptr );
| (начиная с C++20) |
Пытается разобрать входной поток is в std::chrono::year_month ym в соответствии со строкой формата fmt.
Ведёт себя как функция ввода без форматирования, за исключением того, что её действие на is.gcount() не определено. После создания и проверки объекта sentry предпринимается попытка разобрать входной поток is в ym в соответствии со строкой формата fmt. Если разбор не позволяет декодировать допустимое значение year_month, вызывается is.setstate(std::ios_base::failbit), а ym не изменяется.
Если используется и успешно разбирается спецификатор формата %Z, разобранное значение присваивается *abbrev, если abbrev не является нулевым указателем. Если используется и успешно разбирается спецификатор формата %z или его модифицированный вариант, разобранное значение присваивается *offset, если offset не является нулевым указателем.
Параметры
| is | - | входной поток |
| fmt | - | строка формата (см. ниже) |
| ym | - | объект для хранения результата разбора |
| abbrev | - | если не является нулевым указателем, указатель на объект, в котором будет храниться аббревиатура или название часового пояса, соответствующее спецификатору %Z |
| offset | - | если не является нулевым указателем, указатель на объект, в котором будет храниться смещение относительно UTC, соответствующее спецификатору %z |
Строка формата
Строка формата состоит из нуля или более спецификаторов преобразования и обычных символов. Каждый обычный символ, кроме символов пробельных знаков и завершающего нулевого символа, соответствует одному такому же символу во входном потоке либо приводит к сбою функции, если следующий символ в потоке не совпадает с ним.
Каждый пробельный символ соответствует нулю или более пробельным символам во входном потоке.
Каждый немодифицированный спецификатор преобразования начинается с символа %, за которым следует символ, определяющий поведение спецификатора. Некоторые спецификаторы преобразования имеют модифицированную форму, в которой после символа % вставляется символ-модификатор E или O. Некоторые спецификаторы преобразования имеют модифицированную форму, в которой после символа % вставляется параметр ширины, заданный положительным десятичным целым числом (ниже обозначен как N). Каждый спецификатор преобразования приводит к интерпретации соответствующих ему символов как частей типов даты и времени согласно таблице ниже.
Последовательность символов в строке формата, начинающаяся с %, но не соответствующая ни одному из приведённых ниже спецификаторов преобразования, интерпретируется как обычные символы.
Если from_stream не удаётся разобрать всё, что задано строкой формата, если разобранной информации недостаточно для задания полного результата или если при разборе обнаруживается противоречивая информация, вызывается is.setstate(std::ios_base::failbit).
Доступны следующие спецификаторы преобразования:
| Спецификатор преобразования | Описание | |
|---|---|---|
%% | Соответствует буквальному символу %. |
|
%n | Соответствует одному пробельному символу. | |
%t | Соответствует нулю или одному пробельному символу. | |
| Год | ||
%C %NC %EC | Разбирает столетие как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
%y %Ny %Ey %Oy | Разбирает две последние десятичные цифры года. Если столетие не задано иным способом (например, с помощью %C), значения в диапазоне [69, 99] считаются соответствующими годам с 1969 по 1999, а значения в диапазоне [00, 68] — годам с 2000 по 2068. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированные команды |
|
%Y %NY %EY | Разбирает год как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 4. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
| Месяц | ||
%b%B%h | Разбирает полное или сокращённое название месяца для текущей локали без учёта регистра. | |
%m%Nm%Om | Разбирает месяц как десятичное число (январь — это 1). Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
| День | ||
%d%Nd%Od%e%Ne%Oe | Разбирает день месяца как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированные команды |
|
| День недели | ||
%a%A | Разбирает полное или сокращённое название дня недели для текущей локали без учёта регистра. | |
%u%Nu | Разбирает день недели в формате ISO как десятичное число (1–7), где понедельник — это 1. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 1. Ведущие нули допускаются, но не обязательны. |
|
%w%Nw%Ow | Разбирает день недели как десятичное число (0–6), где воскресенье — это 0. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 1. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
| Год в формате недель ISO 8601 | ||
| В ISO 8601 недели начинаются в понедельник, а первая неделя года должна соответствовать следующим требованиям:
|
||
%g%Ng | Разбирает две последние десятичные цифры года в формате недель ISO 8601. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. | |
%G%NG | Разбирает год в формате недель ISO 8601 как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 4. Ведущие нули допускаются, но не обязательны. | |
%V%NV | Разбирает неделю года в формате ISO 8601 как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. | |
| Неделя/день года | ||
%j%Nj | Разбирает день года как десятичное число (1 января — это 1). Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 3. Ведущие нули допускаются, но не обязательны. |
|
%U%NU%OU | Разбирает номер недели года как десятичное число. Первое воскресенье года — это первый день недели 01. Дни того же года, предшествующие ему, относятся к неделе 00. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
%W%NW%OW | Разбирает номер недели года как десятичное число. Первый понедельник года — это первый день недели 01. Дни того же года, предшествующие ему, относятся к неделе 00. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
| Дата | ||
%D | Эквивалентно "%m/%d/%y". |
|
%F%NF | Эквивалентно "%Y-%m-%d". Если указана ширина, она применяется только к %Y. |
|
%x%Ex | Разбирает представление даты для текущей локали. Модифицированная команда |
|
| Время суток | ||
%H%NH%OH | Разбирает час (в 24-часовом формате) как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
%I%NI%OI | Разбирает час (в 12-часовом формате) как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
%M%NM%OM | Разбирает минуты как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
%S%NS%OS | Разбирает секунды как десятичное число. Ширина N задаёт максимальное количество считываемых символов. Ширина по умолчанию равна 2. Ведущие нули допускаются, но не обязательны. Модифицированная команда |
|
%p | Разбирает эквивалент обозначений AM/PM в текущей локали, используемых в 12-часовом формате. | |
%R | Эквивалентно "%H:%M". |
|
%T | Эквивалентно "%H:%M:%S". |
|
%r | Разбирает время в 12-часовом формате для текущей локали. | |
%X%EX | Разбирает представление времени для текущей локали. Модифицированная команда |
|
| Прочее | ||
%c%Ec | Разбирает представление даты и времени для текущей локали. Модифицированная команда |
|
%z%Ez%Oz | Разбирает смещение относительно UTC в формате [+|-]hh[mm]. Например, -0430 означает, что время отстаёт от UTC на 4 часа 30 минут, а 04 — что оно опережает UTC на 4 часа. Модифицированные команды |
|
%Z | Разбирает аббревиатуру или название часового пояса, принимая за него самую длинную последовательность символов, содержащую только символы от A до Z, от a до z, от 0 до 9, -, +, _ и /. |
|
Возвращаемое значение
is
См. также
|
(C++20) | разбирает объект chrono из потока (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/year_month/from_stream