Namespaces
Variants

std::chrono:: parse

From cppreference.net
ヘッダーで定義 <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,

Parsable & tp ) ;
(2) (C++20以降)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 未規定 */ 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 >

/* 未規定 */ 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 >

/* 未規定 */ parse ( const CharT * fmt, Parsable & tp,

std:: chrono :: minutes & offset ) ;
(5) (C++20以降)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 未規定 */ 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 >

/* 未規定 */ 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 >

/* 未規定 */ 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 (修飾なし、 ADL を有効化するため)を呼び出します:

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 は型 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です。先行ゼロは許可されますが必須ではありません。

修正コマンド %EC は、ロケールの代替世紀表現を解釈します。

%y
% N y
%Ey
%Oy
年の下2桁の10進数を解析します。世紀が他の方法で指定されていない場合(例:%Cを使用)、範囲[69, 99]の値は1969年から1999年を、範囲[00, 68]の値は2000年から2068年を参照すると見なされます。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %Ey および %Oy は、ロケールの代替表現を解釈します。

%Y
% N Y
%EY
年を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は4です。先行ゼロは許可されますが必須ではありません。

修正コマンド %EY はロケールの代替表現を解釈します。

%b
%B
%h
ロケールの完全または省略された大文字小文字を区別しない月名を解析します。
%m
% N m
%Om
月を10進数として解析します(1月は 1 となります)。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %Om はロケールの代替表現を解釈します。

%d
% N d
%Od
%e
% N e
%Oe
日付の日を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %Od および %Oe はロケールの代替表現を解釈します。

曜日
%a
%A
ロケールの完全または省略形の大文字小文字を区別しない曜日名を解析します。
%u
% N u
ISO 週曜日を10進数 (1-7) として解析します。月曜日は 1 に対応します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は1です。先行ゼロは許可されますが必須ではありません。
%w
% N w
%Ow
曜日を10進数(0-6)として解析します。日曜日は 0 です。幅 N は読み取る最大文字数を指定します。デフォルトの幅は1です。先行ゼロは許可されますが必須ではありません。

修正コマンド %Ow はロケールの代替表現を解釈します。

ISO 8601 週ベースの年

ISO 8601では週は月曜日から始まり、年の最初の週は以下の要件を満たさなければなりません:

  • 1月4日を含むこと
  • 年の最初の木曜日を含むこと
%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です。先行ゼロは許可されますが必須ではありません。

修正コマンド %OU はロケールの代替表現を解釈します。

%W
% N W
%OW
年における週番号を10進数として解析します。年の最初の月曜日が週01の最初の日となります。それ以前の同じ年の日付は週00となります。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %OW はロケールの代替表現を解釈します。

日付
%D "%m/%d/%y" と同等です。
%F
% N F
"%Y-%m-%d" と同等。幅が指定された場合、 %Y にのみ適用される。
%x
%Ex
ロケールの日付表現を解析します。

修正コマンド %Ex はロケールの代替日付表現を解釈します。

時刻
%H
% N H
%OH
24時間制の時間を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %OH はロケールの代替表現を解釈します。

%I
% N I
%OI
12時間制の時間を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %OI はロケールの代替表現を解釈します。

%M
% N M
%OM
分を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %OM はロケールの代替表現を解釈します。

%S
% N S
%OS
秒を10進数として解析します。幅 N は読み取る最大文字数を指定します。デフォルトの幅は2です。先行ゼロは許可されますが必須ではありません。

修正コマンド %OS はロケールの代替表現を解釈します。

%p 12時間制に関連付けられたAM/PM表示のロケール相当表現を解析します。
%R "%H:%M" に相当します。
%T "%H:%M:%S" に相当します。
%r ロケールの12時間制時刻を解析します。
%X
%EX
ロケールの時間表現を解析します。

修正コマンド %EX はロケールの代替時間表現を解釈します。

その他
%c
%Ec
ロケールの日付と時刻の表現を解析します。

修正コマンド %Ec はロケールの代替日付と時刻表現を解釈します。

%z
%Ez
%Oz
UTCからのオフセットを [+|-]hh[mm] 形式で解析します。例えば -0430 はUTCより4時間30分遅れていることを指し、 04 はUTCより4時間進んでいることを指します。

修正コマンド %Ez %Oz [+|-]h[h][:mm] 形式を解析します(つまり、時間と分の間に : を必要とし、時間の先行ゼロをオプションにします)。

%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 を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから year を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから month を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから day を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから weekday を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから month_day を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから year_month を解析する
(関数テンプレート)
指定されたフォーマットに従ってストリームから year_month_day を解析する
(関数テンプレート)
(C++11)
指定されたフォーマットの日付/時刻値を解析する
(関数テンプレート)