名前空間
変種
操作

std::get_time

提供: cppreference.com
< cpp‎ | io‎ | manip
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
(C++98で非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(C++98で非推奨)
(C++98で非推奨)
(C++98で非推奨)
同期化出力
エラーカテゴリインタフェース
(C++11)
 
入出力マニピュレータ
浮動小数点フォーマット
整数フォーマット
ブーリアンフォーマット
フィールド幅とフィル制御
その他のフォーマット
ホワイトスペース処理
出力のフラッシュ
ステータスフラグ操作
時間と通貨の入出力
(C++11)
get_time
(C++11)
(C++11)
(C++11)
引用符マニピュレータ
(C++14)
 
ヘッダ <iomanip> で定義
template< class CharT >
/*unspecified*/ get_time( std::tm* tmb, const CharT* fmt );
(C++11以上)

in >> get_time(tmb, fmt) で使用されたとき、入力ストリーム in に現在設定されているロケールの std::time_get ファセットに従って書式文字列 fmt に従って日付時刻値として文字入力を解析します。 結果の値は tmb の指す std::tm オブジェクトに格納されます。

目次

[編集] 引数

tmb - 結果が格納される std::tm オブジェクトへの有効なポインタ
fmt - 変換書式を指定するヌル終端 CharT 文字列へのポインタ

書式文字列はゼロ個以上の変換指定子、ホワイトスペース、および (% を除く) 通常の文字から構成されます。 それぞれの通常の文字は、入力ストリーム中の同じ文字に、大文字小文字を区別して、マッチすることが期待されます。 それぞれのホワイトスペース文字は、入力文字列中の任意のホワイトスペース文字にマッチします。 それぞれの変換指定は % で始まり、オプションで E または O 修飾子 (ロケールでサポートされない場合は無視されます) が続き、指定子の動作を決定する文字が続きます。 書式指定子は POSIX の関数 strptime() と一致します。

変換指定子 説明 書き込むフィールド
% % にマッチします。 変換指定全体が %% でなければなりません。 (なし)
t 任意のホワイトスペースにマッチします。 (なし)
n 任意のホワイトスペースにマッチします。 (なし)
Y 4桁の10進数として完全なをパースします。 先頭のゼロは許容されますが必須ではありません。 tm_year
EY の代替表現をパースします。 例: 平成23年 tm_year
y の下2桁を10進数としてパースします。 範囲 [69,99] は1969年から1999年になり、範囲 [00,68] は 2000年から2068年になります。 tm_year
Oy 代替数値系を用いての下2桁をパースします。 例: 十一 tm_year
Ey ロケールの代替カレンダー年号 %EC からのオフセットとしてをパースします。 tm_year
C の上2桁を10進数としてパースします (範囲 [00,99])。 tm_year
EC ロケールの代替表現における年号の名前をパースします。 例: 平成 tm_year
b 完全形または省略形の月名をパースします。 例: Oct tm_mon
h b の同義語。 tm_mon
B b の同義語。 tm_mon
m を10進数としてパースします (範囲 [01,12])。 先頭のゼロは許容されますが必須ではありません。 tm_mon
Om 代替数値系を用いてをパースします。 例: 十二 tm_mon
U 週番号を10進数としてパースします (日曜日が週の最初の日です) (範囲 [00,53])。 先頭のゼロは許容されますが必須ではありません。 tm_year, tm_wday, tm_yday
OU 週番号を代替数値系を用いて %U のようにパースします。 例: 五十二 tm_year, tm_wday, tm_yday
W 週番号を10進数としてパースします (月曜日が週の最初の日です) (範囲 [00,53])。 先頭のゼロは許容されますが必須ではありません。 tm_year, tm_wday, tm_yday
OW 週番号を代替数値系を用いて %W のようにパースします。 例: 五十二 tm_year, tm_wday, tm_yday
j 通日を10進数としてパースします (範囲 [001,366])。 先頭のゼロは許容されますが必須ではありません。 tm_yday
d を10進数としてパースします (範囲 [01,31])。 先頭のゼロは許容されますが必須ではありません。 tm_mday
Od を代替数値系を用いてパースします。 例: 二十七 tm_mday
e d の同義語。 tm_mday
Oe Od の同義語。 tm_mday
曜日
a 完全系または省略形の曜日名をパースします。 例: Fri tm_wday
A a の同義語。 tm_wday
w 曜日を10進数としてパースします。 日曜日が 0 です (範囲 [0-6])。 tm_wday
Ow 曜日を代替数値系を用いて10進数としてパースします。 日曜日が 0 です。 例: 二 tm_wday
時、分、秒
H (24時間表記) を10進数としてパースします (範囲 [00-23])。 先頭のゼロは許容されますが必須ではありません。 tm_hour
OH (24時間表記) を代替数値系を用いてパースします。 例: 十八 tm_hour
I (12時間表記) を10進数としてパースします (範囲 [01,12])。 先頭のゼロは許容されますが必須ではありません。 tm_hour
OI (12時間表記) を代替数値系を用いてパースします。 例: 六 tm_hour
M を10進数としてパースします (範囲 [00,59])。 先頭のゼロは許容されますが必須ではありません。 tm_min
OM を代替数値系を用いてパースします。 例: 二十五 tm_min
S を10進数としてパースします (範囲 [00,60])。 先頭のゼロは許容されますが必須ではありません。 tm_sec
OS を代替数値系を用いてパースします。 例: 二十四 tm_sec
その他
c ロケールの標準の日付時刻の文字列書式をパースします。 例: Sun Oct 17 04:41:13 2010 (ロケール依存) すべて
Ec ロケールの代替表現の日付時刻の文字列書式をパースします。 すべて
x ロケールの標準の日付表現をパースします。 すべて
Ex ロケールの代替日付表現をパースします。 すべて
X ロケールの標準の時刻表現をパースします。 すべて
EX ロケールの代替時刻表現をパースします。 すべて
D "%m / %d / %y " と同等です。 tm_mon, tm_mday, tm_year
r ロケールの標準の12時間表記の時刻 (POSIX では "%I : %M : %S %p") をパースします。 tm_hour, tm_min, tm_sec
R "%H : %M" と同等です。 tm_hour, tm_min
T "%H : %M : %S" と同等です。 tm_hour, tm_min, tm_sec
p 午前/午後に相当するロケールの表現をパースします。 tm_hour

ノート: tm_isdst には書き込まれず、 mktime などの関数で使用するためには明示的に設定する必要があります。


[編集] 戻り値

instd::basic_istream<CharT, Traits> 型の入力ストリームの名前である場合に式 in >> get_time(tmb, fmt) が以下のコードが実行されたかのように動作するような、未規定な型のオブジェクトを返します。

typedef std::istreambuf_iterator<CharT, Traits> Iter;
typedef std::time_get<CharT, Iter> TimeGet;
std::ios_base::iostate err = std::ios_base::goodbit;
const TimeGet& tg = std::use_facet<TimeGet>(in.getloc());
tg.get(Iter(in.rdbuf()), Iter(), in, err, tmb, fmt, fmt + traits::length(fmt));
if (err != std::ios_base::goodbit)
    in.setstate(err);

[編集] ノート

この関数が呼ぶ std::time_get::do_get で規定されているように、 fmt に現れる変換指定子によって直接設定されない *tmb のフィールドがゼロクリアされるかどうかは未規定です。 移植性のあるプログラムは std::get_time を呼ぶ前に *tmb のすべてのフィールドをゼロに初期化するべきです。

[編集]

ノート: 出力を観察するには clang を選択してください。 libstdc++ は %b 指定子を正しく実装していません。 bug 78714

#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
 
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail()) {
        std::cout << "Parse failed\n";
    } else {
        std::cout << std::put_time(&t, "%c") << '\n';
    }
}

出力例:

Sun Feb 18 23:12:34 2011

[編集] 関連項目

入力文字シーケンスから時刻/日付の値をパースして struct std::tm に変換します
(クラステンプレート) [edit]
(C++11)
指定された書式に従って日付/時刻の値をフォーマットして出力します
(関数テンプレート) [edit]