std::chrono::from_stream (std::chrono::sys_time)
template< class CharT, class Traits, class Duration, class Alloc = std::allocator<CharT> >
std::basic_istream<CharT, Traits>&
from_stream( std::basic_istream<CharT, Traits>& is, const CharT* fmt,
std::chrono::sys_time<Duration>& tp,
std::basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
std::chrono::minutes* offset = nullptr );
| (since C++20) |
Попытка разобрать входной поток is в точку времени tp в соответствии с форматом строки fmt.
Ведёт себя как UnformattedInputFunction, за исключением того, что у неё нет указанного эффекта на is.gcount(). После создания и проверки объекта сторожевого пункта пытается разобрать входной поток is в tp в соответствии со строкой формата fmt. Если разбор не может декодировать допустимую точку времени, вызывается is.setstate(std::ios_base::failbit) и tp не изменяется.
Если используется спецификатор формата %Z и он успешно разобран, значение разбора присваивается *abbrev если abbrev не равно нулю. Если используется спецификатор формата %z или его модифицированная форма, и он успешно разобран, значение разбора присваивается *offset если offset не равно нулю, и парсный смещение вычитается из парсного временного отметки перед тем, как разница присваивается tp.
Параметры
| is | - | входной поток |
| fmt | - | строка формата (см. ниже) |
| tp | - | объект точки времени для хранения результата разбора |
| 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 как десятичное число. Первая неделя года начинается с понедельника. Дни до этого относятся к неделе 00. Ширина 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, если Duration преобразуется в std::chrono::seconds, иначе определяется десятичной точностью Duration, и поле интерпретируется как long double в фиксированном формате с символом десятичной точки, определяемым локалью (если встречается). Ведущие нули допускаются, но не обязательны. Изменённая команда |
|
%p | Разбирает эквиваленты обозначений AM/PM, связанных с 12-часовым форматом, в соответствии с локалью. | |
%R | Эквивалентно "%H:%M". |
|
%T | Эквивалентно "%H:%M:%S". |
|
%r | Разбирает время по 12-часовому формату в соответствии с локалью. | |
%X%EX | Разбирает представление времени в соответствии с локалью. Изменённая команда |
|
| Разное | ||
%c%Ec | Разбирает представление даты и времени в соответствии с локалью. Изменённая команда |
|
%z%Ez%Oz | Разбирает смещение от UTC в формате [+|-]hh[mm]. Например, -0430 обозначает 4 часа 30 минут позади UTC, а 04 — 4 часа вперёд UTC. Изменённые команды |
|
%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/w/cpp/chrono/system_clock/from_stream