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
(修飾なし、
ADL
を有効化するため)を呼び出します:
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
式
is
>>
manip
は型
std::
basic_istream
<
CharT, Traits
>
の左辺値であり、値は
is
です。
これらのオーバーロードは、対応する
from_stream
式が適切に形成されている場合にのみ、オーバーロード解決に参加します。
実装では、フォーマット文字列への潜在的なダングリング参照の使用を困難にすることを推奨します。例えば、戻り値の型を非移動可能にし、 operator >> が戻り値の型の左辺値を受け入れないようにすることで実現できます。
目次 |
パラメータ
| fmt | - | フォーマット文字列(下記参照) |
| tp | - | 解析結果を保持するオブジェクト |
| abbrev | - |
タイムゾーン略称または
%Z
指定子に対応する名前を保持する文字列
|
| offset | - |
UTCからのオフセットを表す
%z
指定子に対応する期間
|
フォーマット文字列
書式文字列は、0個以上の変換指定子と通常の文字で構成されます。各通常の文字(空白文字と終端ナル文字を除く)は、入力ストリームから同一の1文字と一致するか、ストリーム上の次の文字が等しくない場合に関数の失敗を引き起こします。
各空白文字は、入力ストリーム内の0個以上の空白文字に一致します。
各変換指定子は、変更されていない状態では
%
文字で始まり、その後に指定子の動作を決定する文字が続きます。一部の変換指定子には、
%
文字の後に
E
または
O
修飾文字が挿入される修正形式があります。一部の変換指定子には、
%
文字の後に正の10進整数(以下では
N
と表示)として与えられる幅パラメータが挿入される修正形式があります。各変換指定子は、一致した文字を以下の表に従って日付と時刻の型の一部として解釈させます。
書式文字列内で
%
で始まる文字シーケンスが、以下の変換指定子のいずれにも一致しない場合、通常の文字として解釈されます。
from_stream
がフォーマット文字列で指定されたすべての解析に失敗した場合、または完全な結果を指定するのに不十分な情報しか解析されなかった場合、あるいは解析によって矛盾する情報が明らかになった場合、
is.
setstate
(
std::
ios_base
::
failbit
)
が呼び出されます。
以下の変換指定子が利用可能です:
|
変換指定子
|
説明 | |
|---|---|---|
%%
|
リテラルの
%
文字に一致します。
|
|
%n
|
空白文字1文字にマッチします。 | |
%t
|
ゼロまたは1つの空白文字に一致します。 | |
| 年 | ||
%C
%
N
C
%EC
|
世紀を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%y
%
N
y
%Ey
%Oy
|
年の下2桁の10進数を解析します。世紀が他の方法で指定されていない場合(例:%Cを使用)、範囲[69, 99]の値は1969年から1999年を、範囲[00, 68]の値は2000年から2068年を参照すると見なされます。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%Y
%
N
Y
%EY
|
年を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は4です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
| 月 | ||
%b
%B
%h
|
ロケールの完全または省略された大文字小文字を区別しない月名を解析します。 | |
%m
%
N
m
%Om
|
月を10進数として解析します(1月は
1
となります)。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
| 日 | ||
%d
%
N
d
%Od
%e
%
N
e
%Oe
|
日付の日を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
| 曜日 | ||
%a
%A
|
ロケールの完全または省略形の大文字小文字を区別しない曜日名を解析します。 | |
%u
%
N
u
|
ISO 週曜日を10進数 (1-7) として解析します。月曜日は
1
に対応します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は1です。先行ゼロは許可されますが必須ではありません。
|
|
%w
%
N
w
%Ow
|
曜日を10進数(0-6)として解析します。日曜日は
0
です。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は1です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
| ISO 8601 週ベースの年 | ||
|
ISO 8601では週は月曜日から始まり、年の最初の週は以下の要件を満たさなければなりません:
|
||
%g
%
N
g
|
ISO 8601週ベース年の最後の2桁の10進数を解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。 | |
%G
%
N
G
|
ISO 8601週ベースの年を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は4です。先行ゼロは許可されますが必須ではありません。 | |
%V
%
N
V
|
ISO 8601の年間週番号を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。 | |
| 年間の週/日 | ||
%j
%
N
j
|
年間の日を10進数で解析します(1月1日は
1
です)。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は3です。先行ゼロは許可されますが必須ではありません。
|
|
%U
%
N
U
%OU
|
年における週番号を10進数として解析します。年の最初の日曜日が週01の最初の日となります。それ以前の同じ年の日は週00となります。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%W
%
N
W
%OW
|
年における週番号を10進数として解析します。年の最初の月曜日が週01の最初の日となります。それ以前の同じ年の日付は週00となります。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
| 日付 | ||
%D
|
"%m/%d/%y"
と同等です。
|
|
%F
%
N
F
|
"%Y-%m-%d"
と同等。幅が指定された場合、
%Y
にのみ適用される。
|
|
%x
%Ex
|
ロケールの日付表現を解析します。
修正コマンド
|
|
| 時刻 | ||
%H
%
N
H
%OH
|
24時間制の時間を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%I
%
N
I
%OI
|
12時間制の時間を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%M
%
N
M
%OM
|
分を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%S
%
N
S
%OS
|
秒を10進数として解析します。幅
N
は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。
修正コマンド
|
|
%p
|
12時間制に関連付けられたAM/PM表示のロケール相当表現を解析します。 | |
%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
、
-
、
+
、
_
、および
/
の文字のみを含む最長の文字列として取得されます。
|
|
例
#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 | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| 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)
|
指定されたフォーマットの日付/時刻値を解析する
(関数テンプレート) |