Spec-Zone.ru › C++

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 (без квалификаторов, для включения разрешения по зависимостям аргументов) следующим образом:

1) from_stream(is, fmt, tp)
2) from_stream(is, fmt.c_str(), tp)
3) from_stream(is, fmt, tp, std::addressof(abbrev))
4) from_stream(is, fmt.c_str(), tp, std::addressof(abbrev))
5) from_stream(is, fmt, tp,
static_cast<std::basic_string<CharT, Traits, Alloc>*>(nullptr), &offset)
6) from_stream(is, fmt.c_str(), tp,
static_cast<std::basic_string<CharT, Traits, Alloc>*>(nullptr), &offset)
7) from_stream(is, fmt, tp, std::addressof(abbrev), &offset)
8) 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. Ведущие нули разрешены, но не обязательны.

Изменённая команда %EC интерпретирует альтернативное представление столетия в текущем языке.

%y
%Ny
%Ey
%Oy
Разбирает последние две десятичные цифры года. Если столетие не указано иначе (например, с помощью %C), значения в диапазоне [69, 99] предполагают годы от 1969 до 1999, а значения в диапазоне [00, 68] — годы от 2000 до 2068. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённые команды %Ey и %Oy интерпретируют альтернативное представление в текущем языке.

%Y
%NY
%EY
Разбирает год как десятичное число. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 4. Ведущие нули разрешены, но не обязательны.

Изменённая команда %EY интерпретирует альтернативное представление в текущем языке.

Месяц
%b
%B
%h
Разбирает полное или сокращённое название месяца в текущем языке, не чувствительное к регистру.
%m
%Nm
%Om
Разбирает месяц как десятичное число (январь — 1). Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённая команда %Om интерпретирует альтернативное представление в текущем языке.

День
%d
%Nd
%Od
%e
%Ne
%Oe
Разбирает день месяца как десятичное число. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённые команды %Od и %Oe интерпретируют альтернативное представление в текущем языке.

День недели
%a
%A
Разбирает полное или сокращённое название дня недели в текущем языке, не чувствительное к регистру.
%u
%Nu
Разбирает день недели по ISO как десятичное число (1-7), где понедельник — 1. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 1. Ведущие нули разрешены, но не обязательны.
%w
%Nw
%Ow
Разбирает день недели как десятичное число (0-6), где воскресенье — 0. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 1. Ведущие нули разрешены, но не обязательны.

Изменённая команда %Ow интерпретирует альтернативное представление в текущем языке.

Год по ISO 8601

В ISO 8601 недели начинаются с понедельника, а первая неделя года должна удовлетворять следующим требованиям:

  • Включает 4 января
  • Включает первый четверг года
%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. Ведущие нули разрешены, но не обязательны.

Изменённая команда %OU интерпретирует альтернативное представление в текущем языке.

%W
%NW
%OW
Разбирает номер недели года как десятичное число. Первый понедельник года — первый день недели 01. Дни того же года до этого — неделя 00. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённая команда %OW интерпретирует альтернативное представление в текущем языке.

Дата
%D Эквивалентно "%m/%d/%y".
%F
%NF
Эквивалентно "%Y-%m-%d". Если ширина указана, она применяется только к %Y.
%x
%Ex
Разбирает представление даты в текущем языке.

Изменённая команда %Ex интерпретирует альтернативное представление даты в текущем языке.

Время суток
%H
%NH
%OH
Разбирает час (24-часовой формат) как десятичное число. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённая команда %OH интерпретирует альтернативное представление в текущем языке.

%I
%NI
%OI
Разбирает час (12-часовой формат) как десятичное число. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённая команда %OI интерпретирует альтернативное представление в текущем языке.

%M
%NM
%OM
Разбирает минуты как десятичное число. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённая команда %OM интерпретирует альтернативное представление в текущем языке.

%S
%NS
%OS
Разбирает секунды как десятичное число. Ширина N определяет максимальное количество символов для чтения. По умолчанию ширина равна 2. Ведущие нули разрешены, но не обязательны.

Изменённая команда %OS интерпретирует альтернативное представление в текущем языке.

%p Разбирает эквиваленты обозначений AM/PM, связанных с 12-часовым форматом времени в текущем языке.
%R Эквивалентно "%H:%M".
%T Эквивалентно "%H:%M:%S".
%r Разбирает 12-часовое время в текущем формате.
%X
%EX
Разбирает представление времени в текущем языке.

Изменённая команда %EX интерпретирует альтернативное представление времени в текущем языке.

Разное
%c
%Ec
Разбирает представление даты и времени в текущем языке.

Изменённая команда %Ec интерпретирует альтернативное представление даты и времени в текущем языке.

%z
%Ez
%Oz
Разбирает смещение от UTC в формате [+|-]hh[mm]. Например, -0430 означает 4 часа 30 минут позади UTC, а 04 — 4 часа вперёд UTC.

Изменённые команды %Ez и %Oz разбирают формат [+|-]h[h][:mm] (т.е., требуют : между часами и минутами, делая ведущий ноль для часа необязательным).

%Z Разбирает сокращение или название часового пояса, как самую длинную последовательность символов, которая содержит только символы от A до Z, a до z, 0 до 9, -, +, _, и /.

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

Отчёт об ошибке Применено к Поведение, как опубликовано Корректное поведение
LWG 3554 C++20 отсутствовали перегрузки для простых последовательностей символов с нулевым завершением добавлены

См. также

from_stream(std::chrono::sys_time)
(C++20)
анализирует sys_time из потока в соответствии с указанным форматом
(шаблон функции)
from_stream(std::chrono::utc_time)
(C++20)
анализирует utc_time из потока в соответствии с указанным форматом
(шаблон функции)
from_stream(std::chrono::tai_time)
(C++20)
анализирует tai_time из потока в соответствии с указанным форматом
(шаблон функции)
from_stream(std::chrono::gps_time)
(C++20)
анализирует gps_time из потока в соответствии с указанным форматом
(шаблон функции)
from_stream(std::chrono::file_time)
(C++20)
анализирует file_time из потока в соответствии с указанным форматом
(шаблон функции)
from_stream(std::chrono::local_time)
(C++20)
анализирует local_time из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует year из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует month из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует day из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует weekday из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует month_day из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует year_month из потока в соответствии с указанным форматом
(шаблон функции)
from_stream
(C++20)
анализирует year_month_day из потока в соответствии с указанным форматом
(шаблон функции)
get_time
(C++11)
анализирует значение даты/времени заданного формата
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/chrono/parse

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API