std::chrono::parse
Определено в заголовке <chrono> | ||
|---|---|---|
template< class CharT, class Parsable > /* unspecified */ parse( const CharT* fmt, Parsable& tp ); | (1) | (с C++20) |
template< class CharT, class Traits, class Alloc, class Parsable >
/* unspecified */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,
Parsable& tp );
| (2) | (с C++20) |
template< class CharT, class Traits, class Alloc, class Parsable >
/* unspecified */ parse( const CharT* fmt, Parsable& tp,
std::basic_string<CharT, Traits, Alloc>& abbrev );
| (3) | (с C++20) |
template< class CharT, class Traits, class Alloc, class Parsable >
/* unspecified */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,
Parsable& tp,
std::basic_string<CharT, Traits, Alloc>& abbrev );
| (4) | (с C++20) |
template< class CharT, class Parsable >
/* unspecified */ parse( const CharT* fmt, Parsable& tp,
std::chrono::minutes& offset );
| (5) | (с C++20) |
template< class CharT, class Traits, class Alloc, class Parsable >
/* unspecified */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,
Parsable& tp, std::chrono::minutes& offset );
| (6) | (с C++20) |
template< class CharT, class Traits, class Alloc, class Parsable >
/* unspecified */ parse( const CharT* fmt, Parsable& tp,
std::basic_string<CharT, Traits, Alloc>& abbrev,
std::chrono::minutes& offset );
| (7) | (с C++20) |
template< class CharT, class Traits, class Alloc, class Parsable >
/* unspecified */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,
Parsable& tp,
std::basic_string<CharT, Traits, Alloc>& abbrev,
std::chrono::minutes& offset );
| (8) | (с C++20) |
Возвращает объект manip неопределённого типа, такой что, заданном объекте std::basic_istream<CharT, Traits> is, выражение is >> manip вызывает from_stream (без квалификаторов, для включения разрешения по зависимостям аргументов) следующим образом:
from_stream(is, fmt, tp)
from_stream(is, fmt.c_str(), tp)
from_stream(is, fmt, tp, std::addressof(abbrev))
from_stream(is, fmt.c_str(), tp, std::addressof(abbrev))
from_stream(is, fmt, tp,
static_cast<std::basic_string<CharT, Traits, Alloc>*>(nullptr), &offset)
from_stream(is, fmt.c_str(), tp,
static_cast<std::basic_string<CharT, Traits, Alloc>*>(nullptr), &offset)
from_stream(is, fmt, tp, std::addressof(abbrev), &offset)
from_stream(is, fmt.c_str(), tp, std::addressof(abbrev), &offset). Выражение is >> manip представляет собой lvalue типа std::basic_istream<CharT, Traits> со значением is.
Эти перегрузки участвуют в разрешении перегрузки только в том случае, если соответствующее выражение from_stream корректно.
Реализации рекомендуют затруднить использование потенциально «висячих» ссылок на строку формата, например, сделав типы возвращаемых значений неперемещаемыми и предотвратив возможность operator>> принимать lvalue типов возвращаемых значений.
Параметры
| 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 как десятичное число. Ширина 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 означает 4 часа 30 минут позади UTC, а 04 — 4 часа вперёд UTC. Изменённые команды |
|
%Z | Разбирает сокращение или название часового пояса, как самую длинную последовательность символов, которая содержит только символы от A до Z, a до z, 0 до 9, -, +, _, и /. |
|
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 3554 | C++20 | отсутствовали перегрузки для простых последовательностей символов с нулевым завершением | добавлены |
См. также
|
(C++20) | анализирует sys_time из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует utc_time из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует tai_time из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует gps_time из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует file_time из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует local_time из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует year из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует month из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует day из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует weekday из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует month_day из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует year_month из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++20) | анализирует year_month_day из потока в соответствии с указанным форматом (шаблон функции) |
|
(C++11) | анализирует значение даты/времени заданного формата (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/chrono/parse