std::chrono:: parse
|
Определено в заголовке
<chrono>
|
||
|
template
<
class
CharT,
class
Parsable
>
/* неопределённый */ parse ( const CharT * fmt, Parsable & tp ) ; |
(1) | (начиная с C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* неопределено */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(2) | (начиная с C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* неопределённый */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(3) | (начиная с C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* неопределённый */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(4) | (начиная с C++20) |
|
template
<
class
CharT,
class
Parsable
>
/* неопределённый */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(5) | (начиная с C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* неопределённый */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(6) | (начиная с C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* неопределённый */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(7) | (начиная с C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* неопределено */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(8) | (начиная с C++20) |
Возвращает объект
manip
неуказанного типа, такой что для объекта
std::
basic_istream
<
CharT, Traits
>
is
выражение
is
>>
manip
вызывает
from_stream
(без квалификации, для обеспечения
поиска, зависимого от аргументов
) следующим образом:
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & 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
%
N
C
%EC
|
Парсит век как десятичное число. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
%y
%
N
y
%Ey
%Oy
|
Анализирует последние две десятичные цифры года. Если век не указан иным образом (например, с помощью %C), значения в диапазоне [69, 99] считаются относящимися к годам с 1969 по 1999, а значения в диапазоне [00, 68] считаются относящимися к годам с 2000 по 2068. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированные команды
|
|
%Y
%
N
Y
%EY
|
Разбирает год как десятичное число. Ширина
N
определяет максимальное количество считываемых символов. Ширина по умолчанию равна 4. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
| Месяц | ||
%b
%B
%h
|
Разбирает полное или сокращённое название месяца в локали без учёта регистра. | |
%m
%
N
m
%Om
|
Преобразует месяц в десятичное число (январь - это
1
). Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
| День | ||
%d
%
N
d
%Od
%e
%
N
e
%Oe
|
Преобразует день месяца в десятичное число. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированные команды
|
|
| День недели | ||
%a
%A
|
Выполняет разбор полного или сокращенного названия дня недели в локали без учета регистра. | |
%u
%
N
u
|
Преобразует номер дня недели по ISO в десятичное число (1-7), где понедельник соответствует
1
. Ширина
N
задает максимальное количество считываемых символов. Ширина по умолчанию равна 1. Ведущие нули допускаются, но не обязательны.
|
|
%w
%
N
w
%Ow
|
Преобразует день недели в десятичное число (0-6), где воскресенье равно
0
. Ширина
N
определяет максимальное количество считываемых символов. Ширина по умолчанию равна 1. Ведущие нули допускаются, но не обязательны.
Модифицированная команда
|
|
| ISO 8601 недельный год | ||
|
В стандарте ISO 8601 недели начинаются с понедельника, и первая неделя года должна удовлетворять следующим требованиям:
|
||
%g
%
N
g
|
Анализирует последние две десятичные цифры года по стандарту ISO 8601 на основе недель. Ширина N определяет максимальное количество символов для чтения. Ширина по умолчанию составляет 2. Ведущие нули разрешены, но не обязательны. | |
%G
%
N
G
|
Анализирует год на основе недель по стандарту ISO 8601 как десятичное число. Ширина N определяет максимальное количество символов для чтения. Ширина по умолчанию составляет 4. Ведущие нули разрешены, но не обязательны. | |
%V
%
N
V
|
Анализирует неделю года по стандарту ISO 8601 как десятичное число. Ширина N определяет максимальное количество символов для чтения. Ширина по умолчанию составляет 2. Ведущие нули разрешены, но не обязательны. | |
| Неделя/день года | ||
%j
%
N
j
|
Преобразует день года в виде десятичного числа (1 января соответствует
1
). Ширина
N
определяет максимальное количество считываемых символов. Ширина по умолчанию составляет 3. Ведущие нули допускаются, но не обязательны.
|
|
%U
%
N
U
%OU
|
Парсит номер недели года как десятичное число. Первое воскресенье года является первым днем недели 01. Дни того же года до этого относятся к неделе 00. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
%W
%
N
W
%OW
|
Преобразует номер недели года в десятичное число. Первый понедельник года является первым днем недели 01. Дни того же года, предшествующие этому, относятся к неделе 00. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
| Дата | ||
%D
|
Эквивалентно
"%m/%d/%y"
.
|
|
%F
%
N
F
|
Эквивалентно
"%Y-%m-%d"
. Если указана ширина, она применяется только к
%Y
.
|
|
%x
%Ex
|
Анализирует представление даты в локали.
Модифицированная команда
|
|
| Время суток | ||
%H
%
N
H
%OH
|
Анализирует час (24-часовой формат) как десятичное число. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию составляет 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
%I
%
N
I
%OI
|
Анализирует час (12-часовой формат) как десятичное число. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
%M
%
N
M
%OM
|
Разбирает минуты как десятичное число. Ширина
N
определяет максимальное количество символов для чтения. Ширина по умолчанию равна 2. Ведущие нули разрешены, но не обязательны.
Модифицированная команда
|
|
%S
%
N
S
%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
,
-
,
+
,
_
, и
/
.
|
|
Пример
#include <chrono> #include <iostream> #include <locale> #include <sstream> int main() { auto parse = [&](auto str, auto fmt, auto o) { std::istringstream is{str}; is.imbue(std::locale("en_US.utf-8")); is >> std::chrono::parse(fmt, o); is.fail() ? std::cout << "Parse failed!\n" : std::cout << o << '\n'; }; parse("01:02:03", "%H:%M:%S", std::chrono::hours{}); parse("01:02:03", "%H:%M:%S", std::chrono::minutes{}); parse("01:02:03", "%H:%M:%S", std::chrono::seconds{}); }
Возможный вывод:
1h 62min 3723s
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3554 | C++20 | перегрузки для простых нуль-терминированных последовательностей символьных типов отсутствовали | добавлены |
Смотрите также
парсит
sys_time
из потока в соответствии с предоставленным форматом
(шаблон функции) |
|
парсит
utc_time
из потока в соответствии с предоставленным форматом
(шаблон функции) |
|
парсит
tai_time
из потока в соответствии с предоставленным форматом
(шаблон функции) |
|
парсит
gps_time
из потока в соответствии с предоставленным форматом
(шаблон функции) |
|
парсит
file_time
из потока в соответствии с предоставленным форматом
(шаблон функции) |
|
парсит
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)
|
парсит значение даты/времени указанного формата
(шаблон функции) |